1. deque란
Deque(데크)는 double-ended queue 의 줄임말로, 앞과 뒤에서 즉, 양방향에서 데이터를 처리할 수 있는 queue형 자료구조를 의미한다. 아래의 [그림1]은 deque의 구조를 나타낸 그림이다.
- python 에서 collections.deque는 list와 비슷하다. append(), pop() 등의 메소드를 deque에서도 제공한다
- append(x)
- list.append(x) 와 마찬가지로 x를 deque의 오른쪽(마지막)에 추가(삽입)해준다.
# 예제1. list.append() vs deque.append() import collections # list lst = ['a', 'b', 'c'] lst.append('d') print(lst) ''' 결과 ['a', 'b', 'c', 'd'] ''' # collections.deque deq = collections.deque(['a', 'b', 'c']) deq.append('d') print(deq) ''' 결과 deque(['a', 'b', 'c', 'd']) '''
- appendleft(x)
- 앞에서 설명했다시피, deque는 양방향에서 데이터를 처리할 수 있는 구조이다. 따라서, append(x)가 오른쪽에서 추가(삽입)을 해준다면, appendleft(x)는 왼쪽 즉, 앞쪽에서 x 를 추가(삽입)해주는 메소드이다.
# 예제2. deque.appendleft() import collections deq = collections.deque(['a', 'b', 'c']) deq.appendleft('d') print(deq) ''' 결과 deque(['d', 'a', 'b', 'c']) '''
- extend(iterable)
# 예제3-1. list.append() vs deque.append() import collections # list lst = ['a', 'b', 'c'] lst.extend('d') print(lst) ''' 결과 ['a', 'b', 'c', 'd'] ''' # collections.deque deq = collections.deque(['a', 'b', 'c']) deq.extend('d') print(deq) ''' 결과 deque(['a', 'b', 'c', 'd']) ''' # 예제3-2. append() vs extend() lst2 = ['a', 'b', 'c', 'd'] lst2.append('ef') # append() lst.extend('ef') # extend() print("lst.extend('ef') >> ", lst) print("lst2.append('ef') >>", lst2) ''' 결과 lst.extend('ef') >> ['a', 'b', 'c', 'd', 'e', 'f'] lst2.append('ef') >> ['a', 'b', 'c', 'd', 'ef'] '''
- extendleft(iterable)
# 예제4. extendleft() import collections deq = collections.deque(['a', 'b', 'c']) deq.extendleft('de') print(deq) ''' 결과 deque(['e', 'd', 'a', 'b', 'c']) '''
- pop()
# 예제5. list.pop() vs deque.pop() import collections lst = ['a', 'b', 'c'] print('list.pop() ->', end=' ') while True: try: print(lst.pop(), end=' ') except IndexError: break print() deq = collections.deque(['a', 'b', 'c']) print('deque.pop() ->', end=' ') while True: try: print(deq.pop(), end=' ') except IndexError: break ''' 결과 list.pop() -> c b a deque.pop() -> c b a '''
- popleft()
# 예제6. deque.popleft() import collections deq = collections.deque(['a', 'b', 'c']) print('deque.popleft() ->', end=' ') while True: try: print(deq.popleft(), end=' ') except IndexError: break ''' 결과 deque.popleft() -> a b c '''
- rotate(n)
# 예제7. rotate(n) import collections deq = collections.deque(['a', 'b', 'c', 'd', 'e']) deq.rotate(1) print('deq >>', ' '.join(deq)) deq2 = collections.deque(['a', 'b', 'c', 'd', 'e']) deq2.rotate(2) print('deq2 >>', ' '.join(deq2)) deq3 = collections.deque(['a', 'b', 'c', 'd', 'e']) deq3.rotate(-1) print('deq3 >>', ' '.join(deq3)) deq4 = collections.deque(['a', 'b', 'c', 'd', 'e']) deq4.rotate(-2) print('deq4 >>', ' '.join(deq4)) ''' 결과 deq >> e a b c d deq2 >> d e a b c deq3 >> b c d e a deq4 >> c d e a b '''
'Engineering WIKI > Python' 카테고리의 다른 글
any, all 함수 (0) | 2022.05.17 |
---|---|
operator의 itemgetter를 사용해서 리스트 정렬 (0) | 2022.05.17 |
collections 모듈 - OrderedDict (0) | 2022.05.12 |
collections 모듈 - namedtuple (0) | 2022.05.12 |
collections 모듈 - defaultdict (0) | 2022.05.12 |
collections 모듈 - Counter (0) | 2022.05.12 |
vars() 내장함수 (0) | 2022.05.10 |
파이썬 리스트 컴프리헨션 (0) | 2022.05.04 |