观得曲

2024-04-24 23:03:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个固定长度的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]

Tags: 项目函数fromimport元素moresetupnow
2条回答

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

来自more_itertoolsspy函数没有完成您似乎期望它完成的任务。它从参数中创建第一个n值的一次性副本,并在元组中返回它,其中的迭代器的行为仍然与参数类似(即使参数是迭代器,而不是可以重复迭代的序列)

为了便于使用,您应该在每次需要时复制deque值。与其print(D[0]),不如做print(list(d))(如果你对格式不挑剔的话,也可以做print(d)

相关问题 更多 >