[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