gpt4 book ai didi

python - 如何在python双端队列中获取要丢弃的项目?

转载 作者:太空狗 更新时间:2023-10-30 01:38:16 36 4
gpt4 key购买 nike

假设我们有一个 dequemaxlen=3。如果 deque 已经有 3 个项目,当我 append 一个新项目时,我怎样才能得到将被丢弃的项目?

原因是我想在内存中维护一个只包含最后N个项目的窗口,当窗口已满并且要丢​​弃一个项目时,我需要获取那个项目并做一些额外的工作。

这是我目前的解决方案:

from collection import deque

MAX_LEN=10

q = deque(maxlen=MAX_LEN)

while True:
if len(q) == MAX_LEN:
discarded = q.popleft()
process(discarded)
q.append(some_var)

这是我能得到的最好的吗?我想过使用 list 和 slice 列表来限制大小/得到丢弃的项目,但是 if 是不可避免的。使用 deque 至少我可以在 pushpopleft 操作中获得 O(1) 性能。

有什么想法吗?

最佳答案

这样的东西可能对你有用。

def pairwise(iterable, n=2 ):
from itertools import tee, islice, izip
return izip(*(islice(it,pos,None) for pos,it in enumerate(tee(iterable, n))))


for values in pairwise(infinite_iterable_generating_your_values, n=3):
process(values[0])
if breakconditions:
break

成对函数的例子:

print [i for i in pairwise(range(10), n=3)]

[(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7), (6, 7, 8), (7, 8, 9)]

关于python - 如何在python双端队列中获取要丢弃的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21737318/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com