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)