Python筆記之雙向佇列

2021-08-30 02:36:41 字數 1252 閱讀 7733

collections.deque類(雙向佇列)是乙個執行緒安全,可以快速從兩端新增或者刪除元素的資料型別。而且如果想要一種資料型別來存放「最近用到的幾個元素」,deque也是乙個很好的選擇。這是因為在新建乙個雙向佇列的時候,你可以指定這個佇列的大小,如果這個佇列滿員了,還可以從反向端刪除過期的元素,然後在尾端新增新的元素。詳見示例1

>>> from collections import deque

>>> dq = deque(range(10), maxlen=10)

>>> dq

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)

>>> dq.rotate(3)

>>> dq

deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6], maxlen=10)

>>> dq.rotate(-4)

>>> dq

deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], maxlen=10)

>>> dq

deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)

>>> dq.extend([11, 22, 33])

>>> dq

deque([3, 4, 5, 6, 7, 8, 9, 11, 22, 33], maxlen=10)

>>> dq.extendleft([10, 20, 30, 40])

>>> dq

deque([40, 30, 20, 10, 3, 4, 5, 6, 7, 8], maxlen=10)

maxlen是乙個可選引數,代表這個佇列可以容納的元素的數量,而且一旦設定,這個屬性就不能修改。

rotate:佇列是旋轉操作接受乙個引數n,當n>0時,佇列的最右邊的n個元素會被移動到佇列的左邊。當n<0時,最左邊的n個元素會被移動到右邊。

當試圖對乙個已滿(len(d) == d.maxlen)的佇列做頭部新增操作的時候,它尾部的元素會被刪除。

extendleft(iter)方法會把迭代器裡的元素逐個新增到雙向佇列的左邊,因此迭代器裡的元素會逆序出現在佇列裡。

雙向佇列實現了大部分列表所擁有的方法,也有一些額外的符號自身設計的方法,比如popleft和rotate。但是為了實現這些方法,雙向佇列也付出了一些代價,從佇列中間刪除元素的操作會慢一些,因為它只對在頭尾的操作進行了優化。

具體的collections.deque的方法請查閱相關文件。

python3入門之 deque(雙向佇列)

建立雙向佇列 import collections d collections.deque d deque 1,2 d deque 3,1,2 clear 清空佇列 d deque 3,1,2 d.clear d deque copy 淺拷貝 d deque 1,2 d1 d.copy d1 deq...

STL之雙向佇列 dequeue

雙向佇列 deque include include include using namespace std int main 以上 是乙個演示qwq deque雙向佇列是一種雙向開口的連續線性空間,可以高效的在頭尾兩端插入和刪除元素,deque在介面上和vector非常相似,下面就總結一下dequ...

STL之deque(雙向佇列)

deque雙向佇列是一種雙向開口的連續線性空間,可以高效的在頭尾兩端插入和刪除元素,deque在介面上和vector非常相似,下面列出deque的常用成員函式 deque在vector函式的基礎上增加了一些函式,體現了雙向佇列的雙向性 push front 在佇列前插入乙個元素 push back ...