collections 모듈
Python의 collections 모듈은 다양한 형태의 컨테이너를 제공하여 데이터 조작을 쉽고 효율적으로 할 수 있게 합니다. 여기서는 이 모듈의 주요 클래스들을 살펴봅니다. 특히 deque와 Couter는 알고리즘 문제 풀이에서도 많이 사용됩니다. 여기서는 자주 사용하는 모듈인 deque와 Counter를 다뤄보도록 하겠습니다. 다만 이전에는 주요했으나 이제는 잘 사용하지 않는 OrderedDict는 함께 다뤄드리도록 하겠습니다.
1. deque
deque는 양쪽 끝에서 요소를 추가하거나 제거할 수 있는 스레드-안전한 양방향 큐입니다. 리스트와 비슷하지만 양쪽 끝에서의 데이터 처리가 훨씬 효율적입니다.
- Max Length:
deque
는maxlen
매개변수를 설정하여 고정된 크기를 가질 수 있습니다. 이 크기를 초과하여 요소를 추가하면, 반대쪽 끝의 요소가 자동으로 제거됩니다.pythonCopy code d = deque(maxlen=3) d.extend([1, 2, 3]) # deque([1, 2, 3]) d.append(4) # deque([2, 3, 4]), 1이 제거됨
pythonCopy code d = deque(maxlen=3) d.extend([1, 2, 3]) # deque([1, 2, 3]) d.append(4) # deque([2, 3, 4]), 1이 제거됨
- 고성능:
deque
는 양 끝에 요소를 추가하거나 제거할 때 리스트보다 훨씬 빠르며, 메모리 사용이 효율적입니다. - 스레드-안전(Thread-Safe):
deque
는 멀티스레딩 환경에서 안전하게 사용할 수 있습니다. 여러 스레드에서 동시에deque
에 접근하더라도 문제가 발생하지 않습니다. - 양방향 처리: 데이터를 양쪽 끝에서 추가하거나 제거할 수 있어, 큐나 스택과 같은 다양한 데이터 구조를 쉽게 구현할 수 있습니다.
2. Counter
Counter
는 요소의 발생 횟수를 세는 데 사용되는 특수한 종류의 딕셔너리입니다. 이는 각 요소를 키로 하고 그 요소의 개수를 값으로 하는 컬렉션입니다.
- 데이터 업데이트:
update()
메서드를 사용하여 카운터에 새로운 데이터를 추가할 수 있습니다. 이는 기존의 카운트에 추가됩니다.c.update('hello') print(c) # 'h'와 'e', 'l', 'o'의 카운트가 증가됨 - 상위 N개 요소 얻기:
most_common()
메서드를 사용하여 가장 흔한 요소들을 얻을 수 있습니다.print(c.most_common(3)) # 가장 흔한 세 요소 반환 - 수학적 연산:
Counter
객체는 덧셈, 뺄셈 등의 수학적 연산도 지원합니다.c1 = Counter('hello') c2 = Counter('world') print(c1 + c2) # 두 카운터 합치기 print(c1 - c2) # c1에서 c2 제거
3. OrderedDict
OrderedDict는 키의 삽입 순서를 기억하는 딕셔너리입니다.
Python 3.7 버전부터는 딕셔너리가 삽입순서를 기억하게 되었습니다. 따라서 이제 이 모듈은 잘 사용되지 않습니다.
4. ChainMap
ChainMap
은 여러 딕셔너리를 하나로 묶어서 사용할 수 있게 해주는 클래스입니다. 여러 딕셔너리를 하나로 묶어서 사용할 때, 첫 번째 딕셔너리부터 차례대로 키를 찾아나가는 방식으로 동작합니다. 앞에 있는 값에 우선순위를 주고 싶다면 이 자료형을 사용하세요.