collections — 컬렉션 및 컨테이너 타입¶
이 모듈은 내장 타입인 list, tuple, dict, set을 보완하는 특수한 컨테이너 데이터 타입을 제공합니다. 양방향 큐(deque), 이름이 있는 필드를 가진 튜플을 만드는 팩토리(namedtuple()), 그리고 순서를 유지하는 딕셔너리(OrderedDict)가 있습니다.
클래스¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
deque(양방향 큐)는 리스트와 유사한 컨테이너로, deque의 양쪽 끝에서 O(1)의 추가 및 제거를 지원합니다. 새로운 deque는 다음 인자를 사용하여 생성됩니다:
iterable은 deque를 생성할 때 채우는 데 사용되는 이터러블입니다. 처음에 비어 있는 deque를 생성하려면 빈 튜플이나 리스트를 사용할 수 있습니다.
maxlen은 반드시 지정해야 하며 deque는 이 최대 길이로 제한됩니다. deque가 가득 차면 새로 추가되는 항목은 반대쪽 끝의 항목을 버립니다.
선택적인 flags를 1로 설정하면 항목을 추가할 때 오버플로를 확인합니다.
deque 객체는
bool,len(), 반복(iteration), 그리고 서브스크립트 읽기/쓰기를 지원합니다. 또한 다음 메서드를 가집니다:- append(x: Any) None¶
x를 deque의 오른쪽에 추가합니다. 오버플로 검사가 활성화되어 있고 큐에 더 이상 공간이 없으면
IndexError를 발생시킵니다.
- appendleft(x: Any) None¶
x를 deque의 왼쪽에 추가합니다. 오버플로 검사가 활성화되어 있고 큐에 더 이상 공간이 없으면
IndexError를 발생시킵니다.
- pop() Any¶
deque의 오른쪽에서 항목을 제거하고 반환합니다. 항목이 없으면
IndexError를 발생시킵니다.
- popleft() Any¶
deque의 왼쪽에서 항목을 제거하고 반환합니다. 항목이 없으면
IndexError를 발생시킵니다.
- extend(iterable: Iterable) None¶
iterable의 모든 항목을 deque의 오른쪽에 추가하여 deque를 확장합니다. 오버플로 검사가 활성화되어 있고 deque에 더 이상 공간이 없으면
IndexError를 발생시킵니다.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
이것은 특정 이름과 필드 집합을 가진 새로운 namedtuple 타입을 생성하는 팩토리 함수입니다. namedtuple은 tuple의 서브클래스로, 숫자 인덱스뿐만 아니라 상징적인 필드 이름을 사용한 속성 접근 구문으로도 필드에 접근할 수 있게 해줍니다. 필드는 필드 이름을 지정하는 문자열의 시퀀스입니다. CPython과의 호환성을 위해 공백으로 구분된 필드 이름을 가진 문자열일 수도 있지만(다만 이것은 효율이 떨어집니다). 사용 예:
from collections import namedtuple MyTuple = namedtuple("MyTuple", ("id", "name")) t1 = MyTuple(1, "foo") t2 = MyTuple(2, "bar") print(t1.name) assert t2.name == t2[1]
인스턴스는 또한 다음 메서드를 제공합니다:
- collections._asdict() OrderedDict
필드 이름과 그 값을
OrderedDict로 반환합니다.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
추가된 키의 순서를 기억하고 유지하는
dict타입의 서브클래스입니다.dict와 동일한 생성자 형식((key, value)쌍의 이터러블, 다른 매핑, 또는 키워드 인자)을 받습니다. ordered dict를 반복하면 키/항목이 추가된 순서대로 반환됩니다:from collections import OrderedDict # To make benefit of ordered keys, OrderedDict should be initialized # from sequence of (key, value) pairs. d = OrderedDict([("z", 1), ("a", 2)]) # More items can be added as usual d["w"] = 5 d["b"] = 3 for k, v in d.items(): print(k, v)
출력:
z 1 a 2 w 5 b 3
- popitem() Tuple¶
딕셔너리에서 (key, value) 쌍을 제거하고 반환합니다. 쌍은 LIFO 순서로 반환됩니다.
CPython과의 차이점
OrderedDict.popitem()은last=False인자를 지원하지 않으며, 항목이 있으면 항상 마지막 항목을 제거하고 반환합니다.이에 대한 우회 방법은
pop(<first_key>)를 사용하여 첫 번째 항목을 제거하는 것입니다:first_key = next(iter(d)) d.pop(first_key)