作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我们有一个 deque
,maxlen=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
至少我可以在 push
和 popleft
操作中获得 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/
我是一名优秀的程序员,十分优秀!