一、deque概述
deque是Python的collections模塊中的一種數據類型,是雙向隊列(double-ended queue)的實現。雙向隊列是一種隊列,但是可以在隊列的兩端添加和刪除元素,可以看做是棧和隊列的結合體。由於deque既可以從左側添加和刪除元素,也可以從右側添加和刪除元素,因此可以更加方便地進行隊列和棧的操作。deque的數據結構是基於鏈表實現的,因此在頻繁的插入和刪除操作中效率更高。
二、deque的創建
deque的創建可以使用以下語法:
from collections import deque dq = deque([1, 2, 3, 4])
以上代碼就創建了一個包含4個元素的deque。可以發現,創建deque與創建普通的Python list非常相似,只需使用deque()函數,參數為包含元素的列表即可。
三、deque的基本操作
1. 添加元素
deque可以從左側和右側添加元素,分別使用appendleft()和append()函數,對應地,刪除元素可以使用popleft()和pop()函數。以下代碼演示如何從左側和右側添加元素:
from collections import deque dq = deque([1, 2, 3, 4]) dq.appendleft(0) dq.append(5) print(dq) # 輸出結果:deque([0, 1, 2, 3, 4, 5])
2. 刪除元素
刪除元素可以使用popleft()和pop()函數,以下代碼演示如何從左側和右側刪除元素:
from collections import deque dq = deque([1, 2, 3, 4]) dq.popleft() dq.pop() print(dq) # 輸出結果:deque([2, 3])
3. 訪問元素
deque可以使用下標訪問元素,也支持切片操作。下標訪問元素需要指定元素的位置,可以使用正負整數,其中正整數從左側開始計數,負整數從右側開始計數。以下代碼演示了如何訪問元素:
from collections import deque dq = deque([1, 2, 3, 4]) print(dq[1]) # 輸出結果:2 print(dq[-1]) # 輸出結果:4 print(dq[1:-1]) # 輸出結果:deque([2, 3])
四、deque的高級操作
1. 旋轉操作
deque可以進行旋轉操作,即把隊列的元素向左或向右移動。旋轉的位數如果是正數,表示向右旋轉;如果是負數,表示向左旋轉。以下代碼演示了如何進行旋轉操作:
from collections import deque dq = deque([1, 2, 3, 4]) dq.rotate(1) # 向右旋轉1位 print(dq) # 輸出結果:deque([4, 1, 2, 3]) dq.rotate(-2) # 向左旋轉2位 print(dq) # 輸出結果:deque([2, 3, 4, 1])
2. 其他操作
deque還支持其他一些基本操作,例如len()函數返回deque中元素的個數;extend()函數和extendleft()函數分別從deque的右側和左側添加多個元素;remove()函數移除deque中第一個匹配的元素;count()函數返回指定元素在deque中出現的次數;reverse()函數將deque中的元素反轉。以下代碼演示了如何使用這些操作:
from collections import deque dq = deque([1, 2, 3, 4, 1]) print(len(dq)) # 輸出結果:5 dq.extend([5, 6]) print(dq) # 輸出結果:deque([1, 2, 3, 4, 1, 5, 6]) dq.extendleft([0, -1]) print(dq) # 輸出結果:deque([-1, 0, 1, 2, 3, 4, 1, 5, 6]) dq.remove(1) print(dq) # 輸出結果:deque([-1, 0, 2, 3, 4, 1, 5, 6]) print(dq.count(1)) # 輸出結果:1 dq.reverse() print(dq) # 輸出結果:deque([6, 5, 1, 4, 3, 2, 0, -1])
五、總結
deque是一種Python的collections模塊中的雙向隊列數據類型,可以從左側和右側添加和刪除元素,支持下標訪問和切片操作。deque是基於鏈表實現的,因此在頻繁的插入和刪除操作中效率更高。在實際編程中,deque可以被廣泛地應用於隊列和棧的場景,能夠更加方便地進行操作。此外,deque還支持一些高級操作,例如旋轉操作、擴展操作、移除操作、計數操作和反轉操作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183655.html