我有一个固定长度的双端队列,接收左侧的推送物品。
我希望定期复制所有值,而不会影响双端队列中的元素。我正在使用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]
来自spy
的more_itertools
功能并没有像你期望的那样做。它从参数中生成第一个n
值的一次性副本,并将其返回到具有迭代器的元组中,该迭代器仍然像参数一样(即使参数是迭代器,也不是可以重复迭代的序列) 。
为了您的使用,您应该只在每次需要时复制deque值。而不是print(D[0])
,只需要print(list(d))
(或者只是print(d)
,如果你不挑剔格式)。
根据您在代码中评论的内容,如果您确实希望在检查时出列更改,为什么不只是弹出项目(这与您的标题相矛盾)?