본문 바로가기

컴퓨터/파이썬 공부정리

[Python] deque 기본 설정( deque(iterable, maxlen) )

deque를 쓸 때 다음과 같이 모듈을 불러온다.

from collections import deque

deque를 from queue import deque로 불러올 수 있는데 하지 말자. 멀티스레딩을 위한 것이기도 하고, 큐가 매우 느리다.

링크: https://www.acmicpc.net/blog/view/70

 

자주 틀리는 요인

원래는 BOJ 101 글에 있었던 내용인데, 쓸 내용이 너무 많아져서 독립된 글로 옮겼습니다. 예제는 다 맞는데요... 채점 데이터에는 예제만 있는 게 아니라 우리에게 공개되지 않는 추가적인 데이터

www.acmicpc.net


deque는 다음과 같은 형식을 지닌다.

from collections import deque

dq = deque(iterable, maxlen)

iterable객체에는 string, tuple, list, set, dictionary(key만 읽음)등이 올 수 있다. data type이 어떠하든 iterable object에서 서 요소를 하나씩 불러와 저장하므로 뭘 넣어도 상관없다.

from queue import deque
dq = deque({1,2,3}, 3)
print(dq)
>>> deque([1, 2, 3], maxlen=3)

dq = deque((1,2,3), 3)
print(dq)
>>> deque([1, 2, 3], maxlen=3)

 

maxlen에는 deque의 길이의 최댓값을 설정할 수 있다.

만약 append(), appendleft()를 통해 maxlen 이상의 값을 추가할 경우, append()을 하게 되면 맨 왼쪽의 원소가 삭제되고 ,appendleft()를 할 경우 맨 오른쪽의 원소가 삭제되고 값이 추가된다. 다음 코드는 deque의 추가, 삭제의 예시이다.

from queue import deque
dq = deque((1,2,3), 3)
print(dq)
>>> deque([1, 2, 3], maxlen=3)

dq.append(4)
print(dq)
>>> deque([2, 3, 4], maxlen=3)

dq.appendleft(5)
print(dq)
>>> deque([5, 2, 3], maxlen=3)

iterable를 초기화하지 않고 maxlen을 iterable 객체로 읽기 때문에 TypeError가 발생한다. maxlen을 쓰고자 할 땐 deque([], maxlen) 등을 통해 반드시 초기화를 진행하고 사용해야 한다.

from queue import deque
dq = deque(3)
>>> TypeError: 'int' object is not iterable