我有一个固定长度的双端队列,它在左侧接收推送的项目。
我希望定期复制所有值,而不影响双端队列中的元素。我正在使用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]
答案 0 :(得分:1)
spy
中的more_itertools
函数没有执行您期望的功能。它会一次性复制参数中的第一个n
值,然后将其返回给元组,并且该迭代器的行为仍然与参数类似(即使参数是一个迭代器,而不是一个可以反复重复)。
供您使用,您应该只在每次需要时都复制双端队列值。代替print(D[0])
,只需执行print(list(d))
(或者如果您对格式不挑剔,只需print(d)
)。
答案 1 :(得分:0)
根据您在代码中的注释,如果您实际上希望在检查队列时更改出列队列,为什么不弹出项目(与标题冲突)呢?