Deque雙端佇列 Python成為專業人士筆記

2021-10-07 17:43:36 字數 1900 閱讀 9161

建立空的雙端佇列:

dl = deque()

建立帶元素的雙端佇列:

dl = deque([1, 2, 3, 4])

向佇列中新增元素(預設右側新增):

左側新增元素:

向佇列新增列表元素:

dl.extend([6, 7])   # deque([0, 1, 2, 3, 4, 5, 6, 7])

在左側新增列表元素:

dl.extendleft([-2, -1])   # deque([-1, -2, 0, 1, 2, 3, 4, 5, 6, 7]) ,注意新增的順序

使用.pop()會預設在佇列右側刪除乙個元素:

dl.pop()   # 7 => deque([-1, -2, 0, 1, 2, 3, 4, 5, 6])

使用.popleft()左側刪除元素:

dl.popleft()   # -1 deque([-2, 0, 1, 2, 3, 4, 5, 6]) 注意會返回被刪除的元素

根據值刪除元素:

dl.remove(1)   # deque([-2, 0, 2, 3, 4, 5, 6])

反轉佇列:

dl.reverse()   # deque([6, 5, 4, 3, 2, 0, -2])

extend: 只能新增乙個列表,意即擴充套件列表

在建立deque時使用maxlen引數來限制deque的大小:

from collections import deque

d = deque(maxlen=3) # 限制只能增加3個元素

注意,乙個列表物件在佇列中算乙個,如下:

from collections import deque

d = deque(maxlen=3) # 限制只能增加3個元素

print(d)

# deque([[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]], maxlen=3) 可以放入3個列表

deque是唯一具有快速佇列操作特性的python資料結構,其乙個基本用例是廣度優先搜尋:

from collections import deque

def bfs(graph, root):

distances = {}

distances[root] = 0

q = deque([root])

while q:

# 最早看到(但尚未訪問)的節點將是最左邊的節點

current = q.popleft()

for neighbor in graph[current]:

if neighbor not in distances:

distances[neighbor] = distances[current] + 1

# 當我們看到乙個新節點時,我們將其新增到佇列的右側

return distances

假設我們現在有乙個簡單的有向圖:

graph =

我們現在可以求出從某個起始位置開始的距離:

bfs(graph, 1) 

#輸出:

bfs(graph, 3)

#輸出:

以上內容來自創帆雲整理

雙端佇列(deque)

區別於資料結構的雙端佇列,這裡的是stl的!雙端佇列 deque容器類 include與vector 類似,支援隨機訪問和快速插入刪除,它在容器中某一位置上的操作所花費的是線性時間。與 vector不同的是,deque還支援從開始端插入資料 push front 此外deque 不支援與vector...

雙端佇列deque

雙端佇列deque容器是一種優化了的 在序列兩端對元素進行新增和刪除操作的基本序列容器。它也允許適度快速地進行隨機訪問 就像vector一樣,它也有乙個operator操作符,然而,它沒有vector的那種把所有的東西都儲存在一塊連續的記憶體塊中的約束。deque的典型實現是利用多個連續的儲存塊 同...

deque雙端佇列

deque 1 生成構造 constructing deques include include int main std deque fifth myints,myints sizeof myints sizeof int fifth std deque first 3 deque with 3 ...