查看双端队列

View into a Deque

我有一个固定长度的双端队列,它接收左侧推送的项目。

我希望定期复制所有值,而不影响双端队列中的元素。我正在使用 more_itertools "spy" 函数,如下所示:

from collections import deque
from more_itertools import spy

d = deque(maxlen=3)
d.appendleft(1)
d.appendleft(2)
d.appendleft(3)

# Setup
D = spy(d, n=3)
print(D[0])  # >>>[3, 2, 1]

# Now add another item and retrieve the snapshot again
d.appendleft(4)
print(D[0])  # >>>[3, 2, 1]  Same! I want: [4, 3, 2]

根据您在代码中的评论,如果您确实希望在检查时更改出队,为什么不直接弹出项目(这与您的标题相矛盾)?

more_itertools 中的 spy 函数并没有按照您的预期执行。它从参数中一次性复制第一个 n 值,并在一个元组中 returns 它带有一个迭代器,该迭代器的行为仍然像参数一样(即使参数是迭代器,而不是可以重复迭代的序列)。

为了您的使用,您应该在每次需要时复制双端队列值。而不是 print(D[0]),只需 print(list(d))(如果您对格式不挑剔,则只需 print(d))。