我有一个固定长度的deque,它在左侧接收推送的项目
我希望定期复制所有的值,而不影响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
值的一次性副本,并在元组中返回它,其中的迭代器的行为仍然与参数类似(即使参数是迭代器,而不是可以重复迭代的序列)为了便于使用,您应该在每次需要时复制deque值。与其
print(D[0])
,不如做print(list(d))
(如果你对格式不挑剔的话,也可以做print(d)
)相关问题 更多 >
编程相关推荐