在不知道最后一个元素的长度的情况下,实现不包含最后一个元素的迭代器的pythonic方法是什么?
一个例子:
>>> list(one_behind(iter(range(10)))
... [0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> iter_ = one_behind(iter((3, 2, 1)))
>>> next(iter_)
... 3
>>> next(iter_)
... 2
>>> next(iter_)
... StopIteration
一种简单的方法是使用循环并存储先前的值,但是我想简短一些。
使用循环的参考实现:
def one_behind(iter_):
prev = None
for i, x in enumerate(iter_):
if i > 0:
yield prev
prev = x
import itertools
def behind(it):
# it = iter(it) # to handle non-iterator iterable.
i1, i2 = itertools.tee(it)
next(i1)
return (next(i2) for x in i1)
用法:
>>> list(behind(iter(range(3))))
[0, 1]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句