위키북스 박응용 저 "점프 투 파이썬" 책을 읽고 정리한 내용입니다.

다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.

데크는 양방향 큐이다

  • deq : double-ended queue의 약자이다
  • 즉, 양쪽으로 append하고 pop하는 연산에 특화 되어있는 자료형이다
  • 리스트의 경우에는 오른쯕에 넣고 빼는 append()pop() 은 O(1)로 빠르지만, 왼쪽에 넣고 빼는 insert(0, x)pop(0) 은 리스트 요소를 한칸씩 전부 밀고 당겨야 되므로 O(n)의 시간복잡도를 가진다
  • 하지만 데크의 경우에는 양쪽에 넣고 빼는 연산이 전부 O(1)로 매우 빠르다.
  • 따라서 양쪽으로 넣고 빼는 일이 많은 경우에는 리스트보다 데크를 사용하는 것이 더 좋다.

생성자

a = collections.deque()
a = collections.deque(iterable)
  • 인자를 아무것도 넣지 않으면 빈 데크가 만들어진다
  • 반복 가능한 객체를 넣으면 그 객체의 내용이 데크로 만들어진다
  • maxlen=숫자 : 생략가능한 매개변수로 maxlen 이 있다. 이놈은 데크의 최대길이를 선언하는놈이며 데크가 찼을 경우에 새로 요소를 추가하면 왼쪽에서부터 차례로 지워진다

요소 추가

deq.append(object)
deq.appendleft(object)
  • append() 은 오른쪽에 요소 추가
  • appendleft() 은 왼쪽에 요소 추가

데크 확장

deq.extend(iterable)
deq.extendleft(iterable)
  • extend() 는 오른쪽에 확장
  • extendleft() 는 왼쪽에 확장

요소 삭제

deq.pop()
deq.popleft()
  • pop() 은 오른쪽에서 하나 꺼냄
  • popleft() 은 왼쪽에서 하나 꺼냄

인덱스 찾기

deq.index(object)
  • object가 처음으로 등장하는 인덱스를 deq에서 찾아서 알려줌

회전하기

deq.rotate(n=1)
deq.rotate(n=-1)
  • n=1 : 오른쪽으로 하나 회전. 즉, deq.appendleft(deq.pop()) 와 같음
  • n=-1 : 왼쪽으로 하나 회전. 즉, deq.append(deq.popleft()) 와 같음
  • 숫자는 얼마큼 회전할지, 부호는 방향을 의미한다