Python의 컬렉션 모듈: deque

Deque, Double Ended Queue의 줄임말



양쪽 끝에 빠른 추가 및 팝이 있는 목록과 같은 컨테이너입니다.

데크는 스택과 큐의 일반화입니다.

Deques는 양쪽 방향에서 거의 동일한 O(1) 성능으로 deque의 양쪽에서 스레드 안전하고 메모리 효율적인 추가 및 팝을 지원합니다.

데크 가져오기




from collections import deque


deque 컨테이너 생성




""" deques can be created from any iterable
using : "deque(iterable)" syntax
"""

d1 = deque([1, 2, 3, 3, 4, 5])  # from list
d2 = deque(("Kathan", 19, 'idc'))  # from tuple
d3 = deque("Followme")  # from string

# dictionary is an iterable of keys btw,
d4 = deque({"name": "R", "age": 1})  # from dict
print(d1, d2, d3, d4, sep='\n')

"""OUTPUT
deque([1, 2, 3, 3, 4, 5])
deque(['Kathan', 19, 'idc'])
deque(['F', 'o', 'l', 'l', 'o', 'w', 'm', 'e'])
deque(['name', 'age'])
"""


maxlen 인수



deque의 크기를 결정하는 선택적 인수maxlen를 전달할 수도 있습니다.
deque(iterable, maxlen)

📑If maxlen is not specified or is None, deques may grow to an arbitrary length.



그렇지 않으면 deque는 지정된 최대 길이로 제한됩니다. 제한된 길이의 deque가 가득 차면 새 항목이 추가될 때 반대쪽 끝에서 해당 수의 항목이 삭제됩니다.

인스턴스화 후 deque를 업데이트하는 방법을 안다면 이 작업이 더 이해가 될 것입니다. 지금부터 이러한 방법에 대해 논의해 보겠습니다.

추가, appendleft , pop , popleft 방법




my_deque = deque([1, 2, 3, 4, 5])

# append(y) => appends y to right side
my_deque.append(6)
print("After my_deque.append(6) =>", my_deque)

# appendleft(y) => appends y to left side
my_deque.appendleft(0)
print("After my_deque.appendleft(0) =>", my_deque)

# pop() => Remove and return an element from the right side
my_deque.pop()
print("After my_deque.pop()=>", my_deque)

# popleft() =>Remove and return an element from the left side
my_deque.popleft()
print("After my_deque.popleft()=>", my_deque)

"""OUTPUT
After my_deque.append(6) => deque([1, 2, 3, 4, 5, 6])
After my_deque.appendleft(0) => deque([0, 1, 2, 3, 4, 5, 6])
After my_deque.pop()=> deque([0, 1, 2, 3, 4, 5])
After my_deque.popleft()=> deque([1, 2, 3, 4, 5])
"""


📑 The important part here is that both append methods don't return anything, they perform inplace modifications!



extend , extendleft 메서드




my_deque = deque([1, 2, 3])

"""extend(iterable)
Extend the right side of the deque by 
appending elements from the iterable argument
"""
my_deque.extend([4, 5, 6])
print("After extend:", my_deque)

"""extendleft(iterable)
Extend the left side of the deque by appending 
elements from iterable.
"""
my_deque.extendleft([0, -1, -2])
print("After extendleft:",my_deque)

"""OUTPUT
After extend: deque([1, 2, 3, 4, 5, 6])
After extendleft: deque([-2, -1, 0, 1, 2, 3, 4, 5, 6])
"""


📑 If you notice in the extendleft(iterable) method, the elements are inserted in reversed order i.e. the last element of input iterable is the first in our updated deque. This is because we perform series of left appends by taking elements from start to end (from our iterable).



더 많은 방법





🔮 deque is a very powerful container, and it has loads of functionalities! I have discussed most of them here but feel free to check out the documentation for some extra goodies.



이것으로 컬렉션 모듈에 대한 논의를 마쳤습니다. 광범위한 보도를 즐기셨기를 바랍니다 :) 다른 모험을 위해 저와 다시 함께 하시길 바랍니다!

그때까지 프로그래밍을 즐기세요 🥳

참조



https://docs.python.org/3/library/collections.html#module-collections

좋은 웹페이지 즐겨찾기