查看双端队列
View into a 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
值,并在一个元组中 returns 它带有一个迭代器,该迭代器的行为仍然像参数一样(即使参数是迭代器,而不是可以重复迭代的序列)。
为了您的使用,您应该在每次需要时复制双端队列值。而不是 print(D[0])
,只需 print(list(d))
(如果您对格式不挑剔,则只需 print(d)
)。
我有一个固定长度的双端队列,它接收左侧推送的项目。
我希望定期复制所有值,而不影响双端队列中的元素。我正在使用 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
值,并在一个元组中 returns 它带有一个迭代器,该迭代器的行为仍然像参数一样(即使参数是迭代器,而不是可以重复迭代的序列)。
为了您的使用,您应该在每次需要时复制双端队列值。而不是 print(D[0])
,只需 print(list(d))
(如果您对格式不挑剔,则只需 print(d)
)。