为什么使用迭代中的最后一个maxlen项初始化python deque?

时间:2013-11-01 08:46:35

标签: python deque

我正在学习如何使用双端队列。这是我做的:

>>> d = deque([1,2,3,4,5,6], maxlen=3)

我预计d会包含[1,2,3]。但我得到了:

>>> d
deque([4, 5, 6], maxlen=3)

这不是违反直觉吗?

4 个答案:

答案 0 :(得分:9)

来自docs

  

一旦有限长度双端队列已满,当添加新项目时,a   从对端丢弃相应数量的项目。   有界长度deques提供类似于尾部过滤器的功能   在Unix中。 它们对跟踪交易和其他信息也很有用   只关注最近活动的数据池。

因此,您的代码等同于:

>>> from collections import deque
>>> d = deque(maxlen=3)
>>> for i in range(1, 7):
...     d.append(i)
...     print d
...     
deque([1], maxlen=3)
deque([1, 2], maxlen=3)
deque([1, 2, 3], maxlen=3)
deque([2, 3, 4], maxlen=3)
deque([3, 4, 5], maxlen=3)
deque([4, 5, 6], maxlen=3)

答案 1 :(得分:1)

官方文件清楚地提到了这一点:

  

一旦有限长度双端队列已满,当添加新项目时,a   从对面丢弃相应数量的项目。

答案 2 :(得分:0)

完全没有,来自文档:

“返回一个从左到右初始化的新deque对象(使用append()),其中包含来自iterable”

的数据

我主要使用deque对象作为最新项目的缓冲区。因此,例如,所有用户都持续100个动作。

答案 3 :(得分:0)

这是一个设计决定。将更新的元素保留在队列中更实际。年长者刚从另一端出来。