天天看點

Python資料類型:雙端隊列deque-比清單list性能更高的一種資料類型Python資料類型:雙端隊列

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雁橫)擷取更多有趣的教程