欢迎来到Louis的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
扩大
缩小

python标准库——collections模块 的deque类

deque 双向队列

1.deque基本上实现了List的常用方法,在这个基础上又添加了它的新特性,值得一提的是list的l.insert(0,v)和l.pop(0)的操作(再列表的头部进行插入或删除)的时间复杂度是0(n),随着元素增加耗时呈线性上升的,而deque的这两个操作的时间复杂度是0(1)的,所以当代码对此类操作有性能需求时,用deque再好不过了。

 1 #deque([iterable[, maxlen]]) --> deque object
 2 #deque可接收两个参数,第一个参数iterable必须是一个可迭代对象,第二个参数是一个可选参数,maxlen设置序列的最大长度
 3 dq = deque(range(10))
 4 print(dq)
 5 
 6 #在序列的左侧添加一个元素
 7 dq.appendleft(-1)
 8 print(dq)
 9 
10 #通过从可迭代的对象的元素来扩展 deque 的左侧
11 dq.extendleft(range(100,111))
12 print(dq)
13 
14 #移除并返回序列最左侧的元素
15 ret = dq.popleft()
16 print(ret)
17 print(dq)
18 
19 #将序列的n个数据,n从右往左数,移动到序列的左边,n为负数则从左往右数,将数据移动到序列的右边
20 dq.rotate(2)
21 print(dq)
22 dq.rotate(-4)
23 print(dq)

输出

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
deque([-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
deque([110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
110
deque([109, 108, 107, 106, 105, 104, 103, 102, 101, 100, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
deque([8, 9, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, -1, 0, 1, 2, 3, 4, 5, 6, 7])
deque([107, 106, 105, 104, 103, 102, 101, 100, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 109, 108])

deque 的maxlen参数,deque(maxlen=N) 创建了一个固定长度的队列,当有新的记录加入而队列已满时会自动移动除最老的那条记录。

 1 from collections import deque
 2 
 3 dq = deque(maxlen=3)
 4 
 5 dq.append(1)
 6 print(dq)
 7 dq.append(2)
 8 print(dq)
 9 dq.append(3)
10 print(dq)
11 dq.append(4)
12 print(dq)

输出

deque([1], maxlen=3)
deque([1, 2], maxlen=3)
deque([1, 2, 3], maxlen=3)
deque([2, 3, 4], maxlen=3)

 

posted on 2017-12-26 16:24  Louiszj  阅读(1154)  评论(0编辑  收藏  举报

导航