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)