728x90
3주차 미션: 섹션 4 ~ 5
섹션 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]
🚩 sort vs sorted
- reverse, key=len, key=str.lower, key = func...
- sorted: 정렬 후 새로운 객체 반환 -> 원본 유지
- sort: 정렬 후 객체 직접 변경 -> 원본 수정
🚩 List vs Array 적합한 사용법
- 리스트 기반: 융통성, 다양한 자료형, 범용적 사용
- 숫자 기반: 배열(리스트와 거의 호환)
🌱 03
- 해시테이블(Hashtable)
- Dict 생성 고급 예제
- Setdefault 사용법
🚩 Hash
- 해시함수: 불변의 값으로 이루어져야 한다.
t1 = (10, 20, (30, 40, 50))
t2 = (10, 20, [30, 40, 50])
print(hash(t1)) # 해시함수 : 불변의 값으로 이루어져야 한다.
# print(hash(t2)) # 예외 : TypeError -> list는 해쉬값을 뽑을 수 없다.
🚩 Setdefault
- tuple -> dict
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 발생
🚩 Set
s1 = {'Apple', 'Orange', 'Apple', 'Orange', 'Kiwi'}
s2 = set(['Apple', 'Orange', 'Apple', 'Orange', 'Kiwi'])
s3 = {3}
s4 = set() # set 명시적 선언 필요, {} -> dictionary
s5 = frozenset({'Apple', 'Orange', 'Apple', 'Orange', 'Kiwi'})
# 추가 불가
# s5.add('Melon') # Error: frozenset은 add 함수 자체가 없음
- 지능형 집합(Compreheding Set)
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
강의 링크:
우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
728x90
'활동들 > 인프런 대학생 LEAF 2기' 카테고리의 다른 글
[인프런 리프 2기] 6. 파이썬 병행성 (0) | 2021.04.02 |
---|---|
[인프런 리프 2기] 5. 파이썬 일급함수 (0) | 2021.03.29 |
[인프런 리프 2기] 3. 파이썬 데이터 모델 (0) | 2021.03.22 |
[인프런 리프 2기] 2. 파이썬 클래스 심화 (0) | 2021.03.22 |
[인프런 리프 2기] 0.파이썬 중급 소개 & 커리큘럼 (0) | 2021.03.13 |