Python collections.deque

‘deque’는 ‘double-ended queue’의 줄임말로서 스택과 큐를 합친 것과 같은, 양방향에서 데이터를 삽입 및 추출할 수 있는 자료형입니다.

‘deque’는 ‘deck’(덱)으로 발음합니다.

파이썬 리스트 객체도 비슷한 작업들을 제공하지만, deque는 빠른 고정 길이 작업에 최적화되었습니다.

이 페이지에서는 collections 모듈의 deque 객체에서 사용할 수 있는 다양한 메서드의 사용에 대해 소개합니다.

순서는 아래와 같습니다.


1. append()

from collections import deque

deq1 = deque([1, 2, 3])
deq1.append(4)

print(deq1)
deque([1, 2, 3, 4])

append()는 리스트에서와 같이 deque의 끝(오른쪽)에 값을 추가합니다.


_images/deque_append.png

deque.append() 메서드.


2. appendleft()

from collections import deque

deq2 = deque([1, 2, 3])
deq2.appendleft(0)

print(deq2)
deque([0, 1, 2, 3])

appendleft()는 deque의 앞(왼쪽)에 값을 추가합니다.


_images/deque_appendleft.png

deque.appendleft() 메서드.


3. pop()

from collections import deque

deq3 = deque([1, 2, 3])
deq3_last = deq3.pop()

print(deq3_last)
print(deq3)
3
deque([1, 2])

pop()은 deque의 오른쪽에서 데이터 하나를 가져와서 반환합니다. deque에서 그 값은 삭제되며, 가져올 요소가 없다면 IndexError를 일으킵니다.


_images/deque_pop.png

deque.pop() 메서드.


4. popleft()

from collections import deque

deq4 = deque([1, 2, 3])
deq4_first = deq4.popleft()

print(deq4_first)
print(deq4)
1
deque([2, 3])

popleft()는 deque의 왼쪽에서 데이터 하나를 가져와서 반환합니다. deque에서 그 값은 삭제되며, 가져올 요소가 없다면 IndexError를 일으킵니다.


_images/deque_popleft.png

deque.popleft() 메서드.


5. deque(maxlen=n)

from collections import deque

deq5 = deque(maxlen=3)

for i in range(5):
    deq5.append(i)
    print(deq5)
deque([0], maxlen=3)
deque([0, 1], maxlen=3)
deque([0, 1, 2], maxlen=3)
deque([1, 2, 3], maxlen=3)
deque([2, 3, 4], maxlen=3)

maxlen=n은 deque의 최대 길이를 n으로 제한합니다.

위의 예제에서 볼 수 있듯이 deque 객체의 길이가 3으로 제한되어서, 오른쪽으로 값이 추가되면 왼쪽에서부터 값이 삭제됩니다.


_images/deque_maxlen.png

deque(maxlen=n).



6. reverse()

from collections import deque

deq6 = deque([1, 2, 3])
deq6.reverse()

print(deq6)
deque([3, 2, 1])

reverse()는 deque의 순서를 뒤집습니다.


7. count()

from collections import deque

deq7 = deque([1, 3, 2, 4, 2, 3, 1])
count_2 = deq7.count(2)

print(count_2)
2

count(x)는 deque에 포함된 x의 개수를 반환합니다.


8. rotate()

from collections import deque

deq8 = deque([1, 2, 3])
deq8.rotate(1)      # Shift to the right

print(deq8)

deq8.rotate(-2)     # Shift to the left

print(deq8)
deque([3, 1, 2])
deque([2, 3, 1])

rotate()는 입력한 수만큼 deque의 값들을 (오른쪽으로) 이동합니다. 입력한 값이 음수라면 왼쪽으로 이동합니다.

rotate(n=1)은 appendleft(d.pop())와 동일하고, rotate(n=-1)은 append(d.popleft())와 동일합니다.


_images/deque_rotate.png

deque.rotate() 메서드.


9. clear()

from collections import deque

deq9 = deque([1, 2, 3])
deq9.clear()

print(deq9)
deque([])

clear()는 deque의 값들을 모두 삭제합니다. deque의 길이가 0이 됩니다.


관련 페이지


이전글/다음글

이전글 :