공부 기록/파이썬

시퀀스 (Sequence) - 1

용재 2022. 3. 25. 23:02

시퀀스형

컨테이너(Container : 서로 다른 자료형 가능[List, tuple, collections.deque])
플랫(Flat : 한 개의 자료형만 가능[str, bytes, bytearray, array.array, memoryview])
가변(List, bytearray, array.array, memoryview, deque)
불변(tuple, str, bytes)

리스트 및 튜플 고급

 

# 지능형 리스트 (List Comprehension)
chars = '+_)(*&^%$#@!)'

code_list1 = []
for s in chars:
    # 유니코드 리스트
    code_list1.append(ord(s))
    
print(code_list1)

# List Comprehension
code_list2 = [ord(s) for s in chars]

print(code_list2)


# List Comprehension + Map, Filter
code_list3 = [ord(s) for s in chars if ord(s) > 40]
code_list4 = list(filter(lambda x : x > 40, map(ord, chars)))

# 전체 출력
print(code_list1)
print(code_list2)
print(code_list3)
print(code_list4)
print([chr(s) for s in code_list1])
print([chr(s) for s in code_list2])
print([chr(s) for s in code_list3])
print([chr(s) for s in code_list4])

제너레이터

# Generator : 한 번에 한 개의 항목을 생성(메모리 유지 X)

 

import array

# Generator 생성
tuple_g = (ord(s) for s in chars)
array_g = array.array('I', (ord(s) for s in chars))

print(type(tuple_g))
print(next(tuple_g))
print(next(tuple_g))

print(array_g)
print(type(array_g))
print(array_g.tolist())

print()
print()

# 제네레이터 예제
print(('%s' %c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1, 21)))

for s in ('%s' %c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1, 21)):
    print(s)

print()
print()

# 리스트 주의 (얕은 복사, 깊은 복사)
marks1 = [['~'] * 3 for _ in range(4)]   # 원본 변경 x (얕은 복사)
marks2 = [['~'] * 3] * 4                 # 원본 변경 o (깊은 복사)

print(marks1)
print(marks2)

# 수정 시
marks1[0][1] = 'X'
marks2[0][1] = 'X'

print(marks1)
print(marks2)

# 증명
print([id(i) for i in  marks1])
print([id(i) for i in  marks2])