Appia의 IT세상

파이썬[Python] deque - collections 모듈 본문

Python/Python 기본

파이썬[Python] deque - collections 모듈

Appia 2020. 4. 8. 07:03
반응형

이번 포스팅에서는 collection 모듈에서 deque에 대해서 이야기 해보고자 합니다. deque는 기본적으로 리스트의 방식이 매우 동일합니다. 기존의 큐의 양방향성을 확보한 상태라고 보시면 조금 더 수월할 것이라고 생각이 듭니다. 그럼 생성부터 간단히 한번 살펴보도록 하겠습니다. 그렇지만 모든 데이터의 방향의 기본은 오른쪽입니다. 추가적으로 왼쪽에서 데이터를 뺴고 입력하는 부분에 대해서는 별도의 함수를 제공합니다. 

deque 형태

deque 생성

기본적인 deque생성시에 다음과 같은 형태로 생성이 됩니다.

 

collections.deque([iterable[, maxlen]])

 

그럼 간단한 예시를 보면서 조금 더 살펴보겠습니다. 

 

example)

import collections
 
basedata = ['a','b','c','d']
 
dequedata = collections.deque(basedata)
 
dequedata1 = collections.deque([1,2,3,4])
 
print(dequedata)
 
print(dequedata1)
cs

result)

deque(['a''b''c''d'])
 
deque([1234])
cs

 

위와 같이 리스트등과 같이 iterable 기반의 데이터를 인자로 받아서 deque 생성이 가능합니다. 

 

Deque 생성시 사이즈 고정하기 

위에서 deque 생성시에 다음과 같이 maxlen을 인자로 추가할 수 있습니다. 이럴 경우 deque의 사이즈가 고정이 됩니다. 그럼 다음을 살펴보겠습니다. 

example) 

import collections
 
basedata = ['a','b','c','d']
 
dequedata = collections.deque(basedata,maxlen=3)
 
print(dequedata)
cs

result)

deque(['b''c''d'], maxlen=3)
cs

maxlen을 지정하면 뒤에서부터 데이터가 숫차적으로 데이터 저장되고, deque가 꽉 차면, 추가 입력데이터는 폐기 됩니다. 

 

 

데이터 추가 / append, appendleft

리스트의 명령어와 같이 append를 이용해서 데이터를 하나씩 추가할 수 있습니다. appendleft의 경우 왼쪽에서 데이터를 추가할 수 있습니다. 

example)

import collections
 
basedata = ['a','b','c','d']
 
sampleData = ['z','k','e','r']
 
dequedata = collections.deque(basedata)
 
print("append example")
 
dequedata.append('e')
 
print(dequedata)
 
dequedata.appendleft('z')
 
print(dequedata)
cs

result) 

append example
 
deque(['a''b''c''d''e'])
 
deque(['z''a''b''c''d''e'])
cs

 

데이터 추가(확장)/ extend, extendleft

기본 deque에 iterable데이터를 합치는 명령어입니다. 기본적으로 오른쪽 방향으로 합치고, extendleft의 경우은 왼쪽에 데이터를 붙입니다. 

example) 

import collections
 
basedata = ['a','b','c','d']
 
sampleData = ['z','k','e','r']
 
print("extend example")
 
dequedata.extend(sampleData)
 
print(dequedata)
 
dequedata = collections.deque(basedata) # deque 새로 생성
 
dequedata.extendleft(sampleData)
 
print(dequedata)
cs

result) 

extend example
 
deque(['a''b''c''d''z''k''e''r'])
 
deque(['r''e''k''z''a''b''c''d'])
cs

 

 

데이터 반환 / Pop, Popleft

pop의 경우는 데이터를 하나씩 반환하고, 기존 큐에서 삭제하는 명령어입니다. popleft의 경우는 왼쪽 방향에서 데이터를 반환하고 삭제하는 명령어입니다. 

example)

import collections
 
basedata = ['a','b','c','d']
 
dequedata = collections.deque(basedata)
 
print("pop/popleft example")
 
dequedata.pop()
 
print(dequedata)
 
dequedata.popleft()
 
print(dequedata)
cs

result) 

pop/popleft example
 
deque(['a''b''c'])
 
deque(['b''c'])
cs

 

데이터 삭제/remove, clear

remove의 경우 인자로 넣은 데이터를 deque에서 삭제하는 명령어입니다. clear의 경우는 deque안의 모든 맴버를 삭제합니다. 

example)

import collections
 
basedata = ['a','b','c','d']
 
dequedata = collections.deque(basedata)
 
print("remove, clear example")
 
dequedata.remove('a')
 
print(dequedata)
 
dequedata.clear()
 
print(dequedata)
cs

result) 

remove, clear example
 
deque(['b''c''d'])
 
deque([])
cs

 

데이터 값 위치 바꾸기/reverse, rotate

reverse의 경우 데이터를 뒤집어 버립니다. 그냥 데이터를 통째로 뒤집어 버립니다. 그리고 rotate 명령어는 가장 오른쪽 데이터를 pop해서 appendleft합니다. 이런식으로 데이터를 하나씩 순회하게 합니다. 만약 인자로 들어간 숫만큼 회전을 하게 됩니다. 

example) 

import collections
 
basedata = ['a','b','c','d']
 
dequedata = collections.deque(basedata)
 
print("reverse, rotate example")
 
dequedata.reverse()
 
print(dequedata)
 
dequedata.rotate()
 
print(dequedata)
 
dequedata.rotate(2)
 
print(dequedata)
cs

result) 

reverse, rotate example
 
deque(['d''c''b''a'])
 
deque(['a''d''c''b'])
 
deque(['c''b''a''d'])
cs

 

오늘은 collection모듈의 deque에 대해서 살펴봤습니다. 물론, 구지 deque가 아니더라더 이중 연결리스트등을 활용하는 것도 매우 괜찮습니다.  이중 연결리스트는 다음 링크를 참조하시길 바랍니다. 

파이썬[Python] 038 Double Linked list(이중 연결 리스트)

 

파이썬[Python] 038 Double Linked list(이중 연결 리스트)

이번 포스팅은 앞서서 Linked List의 진보판인 Double Linked List에 대해서 명시해보고자 합니다. 앞서서 포스팅한 Linked List에는 다음오는 객체를 지칭하는 부분만 있는 반면에 Dobule Linked List에서는 전후..

appia.tistory.com

혹 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다. 

 

반응형
Comments