deque(maxlen=N) 创建了一个固定长度的队列,当有新的记录加入而队列已满时会自动移动除最老的那条记录。
1 from collections import deque 2 d=deque(maxlen=3) 3 d.append(1) 4 d.append(2) 5 d.append(3) 6 print(d) 7 print(type(d)) 8 d.append(4) 9 print(d)
输出如下:
deque([1, 2, 3], maxlen=3)
<class 'collections.deque'>
deque([2, 3, 4], maxlen=3)
虽然通过列表操作(append、del)也能够完成deque的功能,但是队列的这种解决方案要更优雅的多,运行速度也将更快。如果deque不指定队列长度,将得到一个无界限的队列,可以在两端执行添加和弹出操作,例如:
1 from collections import deque 2 d=deque() 3 d.append(1) 4 d.append(2) 5 d.append(3) 6 print(d) 7 d.appendleft(4) 8 print(d) 9 d.pop() 10 print(d) 11 d.popleft() 12 print(d)
输出如下:
deque([1, 2, 3])
deque([4, 1, 2, 3])
deque([4, 1, 2])
deque([1, 2])
从队列两端添加或者弹出元素的复杂度都是O(1)。这和列表不同,当从列表的头部插入或者移除元素时,列表的复杂度为O(N)