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
'python > 라이브러리' 카테고리의 다른 글
[Tensorflow] model.save() 오류 (0) | 2022.11.11 |
---|---|
[Tensorflow] 텐서플로우 경고 무시 (0) | 2022.11.11 |
[Python] Geopandas 지도 시각화하기 (0) | 2022.10.11 |
[Python] Geopandas 라이브러리 설치하기 (0) | 2022.10.11 |
[Python] Haversine - 두 지점의 위도 경도로 직선 거리 구하기 (0) | 2022.10.11 |