您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Python collections中雙向隊列deque的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
簡單使用
基本代碼
from collections import deque q = deque(maxlen=4)#有固定長度的雙向隊列 qq = deque() #無固定長度 print(dir(q))#看看有哪些可用方法或屬性
結果:
['__add__', '__bool__', '__class__', '__contains__', '__copy__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'appendleft', 'clear', 'copy', 'count', 'extend', 'extendleft', 'index', 'insert', 'maxlen', 'pop', 'popleft', 'remove', 'reverse', 'rotate']
看到可以append,pop,insert,clear等,還可以像List一樣用中括號 [] 對某個index獲取或設置值。因為是雙向隊列,所以也有左操作函數:appendleft,popleft。額外的還要反轉函數reverse,計數函數count。
使用ipython驗證
In [1]: from collections import deque …: q = deque(maxlen=4)#有固定長度的雙向隊列 …: qq = deque() #無固定長度 …: print(dir(q))#看看有哪些可用方法或屬性 [‘add', ‘bool', ‘class', ‘contains', ‘copy', ‘delattr', ‘delitem', ‘dir', ‘doc', ‘eq', ‘format', ‘ge', ‘getattribute', ‘getitem', ‘gt', ‘hash', ‘iadd', ‘imul', ‘init', ‘init_subclass', ‘iter', ‘le', ‘len', ‘lt', ‘mul', ‘ne', ‘new', ‘reduce', ‘reduce_ex', ‘repr', ‘reversed', ‘rmul', ‘setattr', ‘setitem', ‘sizeof', ‘str', ‘subclasshook', ‘append', ‘appendleft', ‘clear', ‘copy', ‘count', ‘extend', ‘extendleft', ‘index', ‘insert', ‘maxlen', ‘pop', ‘popleft', ‘remove', ‘reverse', ‘rotate'] In [2]: q Out[2]: deque([]) In [3]: q.append(1) In [4]: q.insert(0,33) In [6]: q Out[6]: deque([33, 1]) In [8]: q.appendleft(44) In [9]: q Out[9]: deque([44, 33, 1]) In [10]: q.pop() Out[10]: 1 In [12]: q[1] Out[12]: 33 In [13]: q Out[13]: deque([44, 33]) In [14]: q.reverse() In [15]: q Out[15]: deque([33, 44]) In [17]: q.clear() In [18]: q Out[18]: deque([])
性能測試
pop和append
#coding:utf8 import datetime,time from collections import deque D = deque() L=[] def calcTime(func): def doCalcTime(): sst = int(time.time()*1000) func() eed = int(time.time()*1000) print(func,'cost time:',eed-sst,'ms') return doCalcTime @calcTime def didDeque(): for i in range(0,10000000): D.append(i) while D: D.pop() @calcTime def didList(): for i in range(0,10000000): L.append(i) while L: L.pop() if __name__=='__main__': didDeque() print("------------") didList()
運行結果:
<function didDeque at 0x000002D6912A4D08> cost time: 1924 ms
------------
<function didList at 0x000002D6912D4048> cost time: 2420 ms
是快了一些。
insert
#coding:utf8 import datetime,time from collections import deque D = deque() L=[] def calcTime(func): def doCalcTime(): sst = int(time.time()*1000) func() eed = int(time.time()*1000) print(func,'cost time:',eed-sst,'ms') return doCalcTime @calcTime def didDeque(): for i in range(0,100000): D.insert(5,i) @calcTime def didList(): for i in range(0,100000): L.insert(5,i) if __name__=='__main__': didDeque() print("------------") didList()
運行結果:
<function didDeque at 0x0000021367F06D08> cost time: 32 ms
------------
<function didList at 0x0000021367F34048> cost time: 3499 ms
快了兩個數量級。想想也明白,一個是鏈表,插入的時候只需要改變指針指向,而List是連續空間,需要移動一大堆的元素。
計算移動平均
>>> import numpy as np >>> from collections import deque >>> q=deque(maxlen=5) >>> q.append(1) >>> q.append(2) >>> q.append(3) >>> q.append(4) >>> q.append(5) >>> q.append(6) >>> q deque([2, 3, 4, 5, 6], maxlen=5) >>> np.array(q).mean() 4.0
關于“Python collections中雙向隊列deque的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。