while (1): study();
Part2. 데이터 구조체 본문
2. 시퀀스
분류
컨테이너 시퀀스: 서로 다른 자료형의 항목을 담을 수 있음, 객체 참조를 담음
ex) list, tuple, collections.deque
균일 시퀀스: 단 하나의 자료형만 담을 수 있음, 객체의 값을 직접 메모리에 할당
ex) str, bytes, bytearray, memoryview, array.array
가변 시퀀스: list, bytearray, array.array, collections.deque, memoryview
불변 시퀀스: tuple, str, butes
array.array: 수치 연산에 최적화
Memoryview: 데이터 구조체를 복사하지 않고 메모리 공유
bisect
순서 유지하면서 항목 추가 : bisect.insort()
정렬된 시퀀스를 효율적으로 검색 : bisect.bisect()
3. 딕셔너리와 집합
해시 가능
1. 수명 주기 동안 결코 변하지 않는 해시값 (__hash__() 메서드)
2. 다른 객체와 비교 가능(__eq__() 메서드)
3. 동일한 객체는 해시값 동일
키 검색 실패 대응
1) setdefault(): 키가 있으면 값 가져오고, 없으면 기본값으로 해당 키 생성 후 기본값 반환
2) collections.defaultdict
3) __missing__() 메서드
업데이트
update(): 대량으로 데이터 추가 및 오버라이딩
해시 테이블: dict와 set에 적용
1) 메모리 오버헤드가 크다
2) 키 검색이 빠르다
3) 순서는 삽입 순서
* 순서가 변경될 수는 있다 -> 항목을 추가할때마다 해시테이블 크기를 늘릴지 판단하기 때문
4. 텍스트와 바이트
* python 2 vs python 3
Python2 | Python3 | ||
str | string | str | unicode data |
unicode | unicode data | bytes | bytes |
문자열
인코딩: 코드포인트 -> 바이트
디코딩: 바이트 -> 코드포인트
바이트
bytes: 불변
bytearray: 가변
UnicodeEncodeError 처리
# 1. 모르면 무시
str.encode('cp949', errors='ignore')
# 2. ?로 대체
str.encode('cp949', errors='replace')
# 3. xml개체로 대체
str.encode('cp949', errors='xmlcharrefreplace')
바이트 시퀀스의 인코딩 방식 알아내기
Chardet 패키지
chardetect ~.asciidoc
텍스트 파일 다루기
유니코드 샌드위치: 입출력만 bytes, 나머지는 str으로 처리
유니코드 정규화
# 정규화 비교
def fold_equal(str1, str2):
from unicodedata import normalize
return (normalize('NFC', str1).casefold() == normalize('NFC', str2).casefold())
NFC: 합쳐서 정규화
NFD: 나눠서 정규화
NFKC, NFKD: 호환성 문자
발음 구별 기호 제거
unicodedata.combining() 사용
# 결합문자 제거
def shave_marks_latin(txt):
import unicodedata, string
norm_txt = unicodedata.normalize('NFD', txt)
laten_base = False
keepers = []
for c in norm_txt:
if unicodedata.combining(c) and latin_base:
continue
keepers.append(c)
if not unicodedata.combining(c): # 결합문자가 뒤에 오기 때문에 여기 위치
latin_base = c in string.ascii_letters
shaved = ''.join(keepers)
return unicodedata.normalize('NFC', shaved)
유니코드 정렬
Pyuca 패키지
import pyuca
coll = pyuca.Collator()
fruits = ['caju', 'atemoia', 'cajá', 'açai', 'acerola']
sorted_fruits = sorted(fruits, key=coll.sort_key)
sorted_fruits
'독서' 카테고리의 다른 글
Part4. 객체지향 상용구 (0) | 2021.12.05 |
---|---|
Part3. 객체로서의 함수 (0) | 2021.12.05 |
Part1. 들어가며 (0) | 2021.12.05 |
Ch8. 어텐션 (0) | 2021.08.01 |
Ch7. RNN을 사용한 문장 생성 (0) | 2021.07.31 |