섹션 4에서는파이썬 시퀀스(sequence)를 제목으로 하여 시퀀스 형을 비롯한 다양한 자료구조에 대해 배웠다.
항상 쓰던 것들도 있었고 새롭게 배운 것들도 있었다.
섹션 4에서 아래 내용을 배울 수 있었다.
🌱 01
파이썬 데이터 타입 상세 분류
지능형 리스트(Comprehending Lists), 튜플, 딕셔너리
Array 실습
지능형 리스트 주의할 점
🚩 리스트 고급
- Mutable
- Comprehending Lists >>빠르다>> for
- Comprehending Lists + 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)))
# 주의
marks1 = [['~'] * 3 for _ in range(4)] # 모두 다른 주소값
marks2 = [['~'] * 3] * 4 # 하나의 주소값이 4번 복사
🚩 Generator
- 한 번에 한 개의 항목을 생성(메모리 유지X)
: 작은 메모리 조각으로 연속되는 label을 만들어낼 수 있다.
tuple_g = (ord(s) for s in chars) # 괄호!
print(('%s' % c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1, 21)))
🌱 02
튜플(Tuple) 고급 사용
Mutable(가변)
Immutable(불변)
Sort vs Sorted 실습
🚩 튜플 고급
- Unpacking
- Immutable
x, y, *rest = range(10)
print(x, y, rest) # 0 1 [2, 3, 4, 5, 6, 7, 8, 9]
x, y, *rest = range(2)
print(x, y, rest) # 0 1 []
x, y, *rest = 1, 2, 3, 4, 5
print(x, y, rest) # 1 2 [3, 4, 5]
source = (('k1', 'val1'),
('k1', 'val2'),
('k2', 'val3'),
('k2', 'val4'),
('k2', 'val5'))
new_dict1 = {}
new_dict2 = {}
# No use Setdefault
for k, v in source:
if k in new_dict1:
new_dict1[k].append(v)
else:
new_dict1[k] = [v]
print(new_dict1)
# USe Setdefault
for k, v in source:
new_dict2.setdefault(k, []).append(v) # [] 대신 () 사용 시, tuple은 update가 불가하여 error 발생
print(new_dict2)
🌱 04
해시테이블(Hashtable)
Immutable Dict 생성
지능형 Set
Set 선언 최적화
- 읽기 전용(Read Only) Dict, Set을 만들 수 있다.
🚩 immutable Dict
d_frozen = MappingProxyType(d) # hash: read only로 바꼈을 뿐, hash 함수 여전히 지원 X
# 수정 불가
# d_frozen['key2'] = 'value2' # Error 발생
print({chr(i) for i in range(0, 256)})
# from unicodedata import name
# print({name(chr(i), '') for i in range(0, 256)})
🚩 선언 최적화
from dis import dis
print('------')
print(dis('{10}')) # 더 빠르다
print('------')
print(dis('set([10])'))
총 정리
# Chapter04
# 시퀀스형
# 컨테이너(Container : 서로 다른 자료형[List, tuple, collections.deque])
# 플랫(Flat : 한 개의 자료형[str, bytes, bytearray, array.array, memoryview])
# 가변(list, bytearray, array.array memoryview, deque)
# 불변(tuple, str, bytes)
# 해시테이블 ⭐
# Key에 Value를 저장하는 구조
# 파이썬 dict 해쉬 테이블 예
# 키 값의 연산 결과(해쉬 값)에 따라 직접(Direct) 접근이 가능한 구조
# key 값을 해싱 함수 -> 해쉬 주소 -> key에 대한 value 참조
# 해시테이블(hashtable) -> 적은 리소스로 많은 데이터를 효율적으로 관리
# dict -> Key 중복 허용 X, Set -> 중복 허용 X