python/라이브러리

[라이브러리] from collections import deque

sillon 2022. 10. 17. 11:20
728x90
반응형

from collections import deque 

deque는 스택과 큐의 기능을 모두 가진 객체로 출입구를 양쪽에 가지고 있다.

스택처럼써도 되고, 큐처럼 써도 된다.

여러가지 메서드를 이용해서 이런 기능을 구현한다.

 

먼저 deque를 만들어보자

 
 
>>> from collections import deque
>>> dq = deque('love')
>>> dq


deque(['l', 'o', 'v', 'e'])

문자열을 이용해 deque를 만들면 각 문자가 요소로 된 리스트 형태의 deque가 만들어진다.

 

1. 스택 구현 : append(), pop()

스택은 마지막(오른쪽끝)에서 입출력한다.

입력시에는 append() 메서드를 이용하고, 출력시에는 pop()을 이용한다. 

 
>>> dq.append('m')                       # 오른쪽 끝에 항목추가
>>> dq
deque(['l', 'o', 'v', 'e', 'm'])
>>> dq.pop()                             # 오른쪽 끝에 항목가져오면서 삭제
'm'
>>> dq
deque(['l', 'o', 'v', 'e'])

2. 큐 구현 : appendleft(), pop(), append(), popleft()

큐는 왼쪽(처음)에서 입력되고, 오른쪽(마지막)에서 출력된다.

오른쪽 출력 시는 위에서 봤던대로 pop()을 사용하면 된다.

왼쪽에 값을 입력할 때는 appendleft() 메서드를 사용한다.

반대로 오른쪽에 값을 넣고 싶으면 append(), 왼쪽에서 값을 빼고 싶으면 popleft()를 사용한다.

 
>>> dq.appendleft('I')                   # 왼쪽에서 'I'입력
>>> dq
deque(['I', 'l', 'o', 'v', 'e'])
>>> dq.pop()                             # 오른쪽에서 'e'출력
'e'
>>> dq
deque(['I', 'l', 'o', 'v'])

3. deque 확장하기 : extend(), extendleft()

deque를 확장할때는 extend() 메서드를 사용한다. 기본적으로 오른쪽으로 확장된다.

왼쪽으로 확장하고 싶을 때는 extendleft() 메서드를 사용한다.

 
>>> dq
deque(['l', 'o', 'v', 'e'])
>>> dq.extend('you')                            # 오른쪽으로 'y','o','u' 확장
>>> dq
deque(['l', 'o', 'v', 'e', 'y', 'o', 'u'])
>>> dq.extendleft('I')                          # 왼쪽으로 'I' 확장
>>> dq
deque(['I', 'l', 'o', 'v', 'e', 'y', 'o', 'u'])

4. 리스트처럼 사용 : insert(), remove()

deque는 리스트처럼 중간 내용을 수정하거나 새 항목을 입력하거나 삭제할 수 있다.

 
>>> dq
deque(['l', 'o', 'v', 'e'])


>>> dq[2]='n'                      # 인덱스를 이용한 항목 수정 'v' => 'n'
>>> dq
deque(['l', 'o', 'n', 'e'])

새 항목을 입력하거나 기본 항목을 삭제할 때는 insert()메서드와 remove()메서드를 사용한다.

 
>>> dq = deque('love')
>>> dq.insert(0, 'K')                         # 첫번째 항목에 'K'를 추가
>>> dq
deque(['K', 'l', 'o', 'v', 'e'])         
>>> dq.insert(100, 'K')                       # 100번째 항목(없으니까 가장 큰 쪽에)에 'K' 추가
>>> dq
deque(['K', 'l', 'o', 'v', 'e', 'K'])  
>>> dq.remove('K')                            # 'K'항목 삭제
>>> dq
deque(['l', 'o', 'v', 'e', 'K'])              # 나도 몰랐었던 부분인데, 같은 항목이 있을때 지우면 왼쪽부터 삭제됨.
>>> dq.remove('K')
>>> dq


deque(['l', 'o', 'v', 'e'])                   # 오른쪽에 있는 'K'삭제

5. deque의 내용을 좌우로 반전 : reverse()

deque의 내용을 반전시키고 싶으면 reverse() 메서드를 사용하면 된다.

 
>>> dq
deque(['l', 'o', 'v', 'e'])
>>> dq.reverse()
>>> dq
deque(['e', 'v', 'o', 'l'])

 

reference

https://dongdongfather.tistory.com/m/72

728x90
반응형