공부 기록/파이썬
시퀀스 (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])