위키북스 박응용 저 "점프 투 파이썬" 책을 읽고 정리한 내용입니다.
다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.
데크는 양방향 큐이다
- 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())
와 같음- 숫자는 얼마큼 회전할지, 부호는 방향을 의미한다