在Python中获取迭代器的最后N个元素的最佳方法是什么?以下是理论行动中的一个例子:
>>> list(all_but_the_last_n(range(10), 0))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(all_but_the_last_n(range(10), 2))
[0, 1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)
只是为了它的乐趣,这里是Ignacio解决方案的变体,不需要双端队列.
>>> def truncate(it, n):
... cache = [next(it) for i in range(n)]
... index = 0
... for val in it:
... val, cache[index] = cache[index], val
... index = (index + 1) % n
... yield val
Run Code Online (Sandbox Code Playgroud)
当我写上面的内容时,我并不特别关心速度......但也许这会更快一点:
def truncate(it, n):
cache = [next(it) for i in range(n)]
index = 0
for val in it:
yield cache[index]
cache[index] = val
index = (index + 1) % n
Run Code Online (Sandbox Code Playgroud)