温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python collections中双向队列deque的示例分析

发布时间:2021-08-17 11:41:44 来源:亿速云 阅读:172 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关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的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI