查看Deque [关闭]

问题描述 投票:-1回答:2

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

我希望定期复制所有值,而不会影响双端队列中的元素。我正在使用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]
python deque
2个回答
1
投票

来自spymore_itertools功能并没有像你期望的那样做。它从参数中生成第一个n值的一次性副本,并将其返回到具有迭代器的元组中,该迭代器仍然像参数一样(即使参数是迭代器,也不是可以重复迭代的序列) 。

为了您的使用,您应该只在每次需要时复制deque值。而不是print(D[0]),只需要print(list(d))(或者只是print(d),如果你不挑剔格式)。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.