Python資料類型:雙端隊列
說到容器類型,大家第一時間想到的多半是list,而list确實也能解決大部分的需要,但碰到清單内的資料量相當大的時候,性能問題就顯得尤為重要;再或者清單被惡意注入一個無窮大的資料量時,就可能會暴露出安全問題來。較好的替代方法是:collections.deque。獲得性能或安全的同時,犧牲的是資料大小。
deque隊列兩端取出或者删除時間複雜度都是O(1),而清單都是O(n),隊列的性能比清單更好
簡介
collections.deque對象(雙端隊列),支援從任意一端增加删除元素。deque是線程安全的,記憶體高效的隊列,它被設計為從兩端追加和彈出都非常快。
建立deque對象
deque() 用于建立一個deque對象
可選參數:
- iterable 一個可疊代對象,如清單,元組
- maxlen 最大長度,超出最大長度,會将之前的元素擠出去
示例:
from collections import deque
dq = deque([1,2,3,4]],maxlen=10)
deque對象的方法
dq.append(x) 在右端添加x
>>>dq.append(5)
>>>print(dq)
deque([1, 2, 3,4,5])
dq.appendleft(x) 在左端添加x
>>>dq.appendleft(0)
>>>print(dq)
deque([0,1,2,3,4,5])
dq.pop() 在右端彈出元素,若隊列無元素,會報錯
>>>dq.pop()
5
dq.popleft() 在左端彈出元素,若隊列無元素,會報錯
>>>dq.popleft()
0
dq.extend(iterable) 和清單的extend類似,在右側擴充隊列,參數是一個可疊代對象
>>>dq.extend([5,6,7,8])
dq.extendleft(iterable) 同理
>>>dq.extendleft([5,6,7,8])
dq.remove(value) 移除第一個找到的value,若未找到,會導緻IndexError
dq.remove(3)
dq.clear() 清空隊列
dq.clear()
rotate(n) 如果n>0,所有元素向右移動n個,否則向左
dq.rotate(5)
如果你學到什麼,記得給我點個贊哦,也可以關注我的公衆号(Python雁橫)擷取更多有趣的教程