Python

[Python] deque 사용

비번변경 2023. 10. 19. 23:00

개요

2021.10.07 - [자료 구조] 회문 찾기 / 큐 & 스택에서 collections.deque을 이용해 Python으로 큐를 사용하는 방법을 간단히 적어두었다. 실제로 deque는 큐를 구현한 것 아니라 양방향 큐를 구현한 것으로, 종종 deque를 단방향으로 사용하여 큐로 취급하는 것 같다.

이 글에서는 deque 클래스를 사용하는 방법을 간단히 적어둔다. deque에 대한 개념은 2023.10.18 - [자료구조] deque - 양방향 큐에 정리해 두었다.

 

 

클래스 임포트

deque 클래스를 사용할 때는 아래와 같이 임포트 하여 사용할 수 있다. collections는 내장 모듈이므로 추가적인 라이브러리 설치는 필요하지 않다.

from collections import deque

 

 

선언

생성자를 이용해 deque를 선언한다. deque의 최대 길이가 정해져 있다면 maxlen 매개변수를 전달한다.

queue = deque()
len_queue = deque(maxlen=3)

큐에 넣을 데이터를 전달하여 선언할 수도 있다.

queue = deque([0])

 

 

기본 함수 (데이터 추가/삭제)

append / appendleft

append 함수는 전달받은 데이터를 deque 오른쪽에 추가하고, appendleft 함수는 전달받은 데이터를 deque 왼쪽에 추가한다. 

queue = deque([0])
queue.append(1)
queue.appendleft(2)

 

pop / popleft

pop 함수는 deque 오른쪽에서 데이터를 삭제/반환하고, popleft는 deque 왼쪽에서 데이터를 삭제/반환한다.

queue = deque([0, 1, 2])
print(queue.pop())
print(queue.popleft())

 

insert

deque의 특정 위치에 값을 추가할 때는 insert 함수를 사용한다.

queue = deque([0, 1, 2], maxlen=5)
queue.insert(1, 'a')
print(queue)

 

remove

deque에서 특정 데이터를 삭제할 때는 remove 함수를 사용한다. 중복값이 있는 경우 맨 왼쪽값을 삭제한다.

queue = deque([0, 1, 2], maxlen=5)
queue.remove(1)
print(queue)

 

clear

clear 함수를 이용해 deque를 초기화한다. deque에 저장되어 있던 데이터를 모두 삭제하고, 길이를 0으로 만든다.

queue = deque([0, 1, 2], maxlen=3)
queue.clear()
print(queue)

 

reverse

데이터 순서를 역으로 나열한다.

queue = deque([0, 1, 2], maxlen=5)
queue.reverse()
print(queue)

 

 

deque 회전

deque는 rotate 함수도 제공하는데, 매개변수로 지정한 만큼 회전한다. 양수인 경우에는 오른쪽으로, 음수인 경우에는 왼쪽으로 회전한다.

queue = deque([i for i in range(10)])
queue.rotate(2)
print(queue)
queue.rotate(-2)
print(queue)

 

 

참고 문서

https://docs.python.org/ko/3/library/collections.html#collections.deque