collections 라이브러리?
파이썬의 딕셔너리, 리스트, 집합, 튜플에 대한 대안을 제공하는 특수 컨테이너 데이터를 구현한 모듈이다.
즉, 데이터 처리를 위한 유용한 객체를 담고 있는 라이브러리이다.
deque란?
deque는 collections 모듈에서 제공되는 자료형 중 하나로, double-ended queue의 약자이다.
덱 이라고도 부른다.
이름에서 드러나있듯이 deque는 양쪽 끝에서 빠른 삽입과 삭제가 가능하도록 설계된 자료 구조이다.
이는 리스트에 비해 효율적으로 양쪽 끝에서의 삽입과 삭제를 처리할 수 있다.
때문에 이는 스택과 큐의 연산을 모두 지원하는 자료구조라고 볼 수 있다.
deque의 기능
양방향 삽입 및 삭제 | - append(x): 오른쪽 끝에 요소 x를 추가한다. - appendleft(x): 왼쪽 끝에 요소 x를 추가한다. - pop(): 오른쪽 끝의 요소를 제거하고 반환한다. - popleft(): 왼쪽 끝의 요소를 제거하고 반환한다. |
회전 | - rotate(n): 덱을 n만큼 회전시킨다. (n이 양수면 오른쪽, 음수면 왼쪽으로 회전) |
크기 제한 설정 | - deque(maxlen=N): 최대 크기가 N인 덱을 생성한다. 최대 크기에 도달하면 새로운 요소가 추가될 때 자동으로 가장 오래된 요소가 제거된다. |
기타 기능 | - extend(iterable): iterable의 모든 요소를 오른쪽 끝에 추가한다. - extendleft(iterable): iterable의 모든 요소를 왼쪽 끝에 추가한다.(순서가 반대로 되어 추가) - clear(): 모든 요소를 제거한다. - count(x): 덱에서 요소 x의 개수를 센다. - remove(value): 첫 번째로 발견되는 value를 제거한다. |
간단한 예시
from collections import deque
# deque 생성
dq = deque()
# 요소 추가
dq.append(1)
dq.append(2)
dq.appendleft(0)
print(dq) # deque([0, 1, 2])
# 요소 제거
dq.pop()
print(dq) # deque([0, 1])
dq.popleft()
print(dq) # deque([1])
# 회전
dq.extend([2, 3, 4])
dq.rotate(1)
print(dq) # deque([4, 1, 2, 3])
dq.rotate(-2)
print(dq) # deque([2, 3, 4, 1])
# 크기 제한
dq = deque(maxlen=3)
dq.extend([1, 2, 3])
print(dq) # deque([1, 2, 3], maxlen=3)
dq.append(4)
print(dq) # deque([2, 3, 4], maxlen=3) - 1이 제거됨