PyR*_*lez 6 python iterator python-2.7
假设我想查看迭代器的第五个项目,但我想保留所有项目。最好的方法是什么?有模块吗?我可能可以将一个函数组合在一起来创建一个新的迭代器,但我想知道它是否已经完成了?
我认为你想要的是itertools.tee,它本质上在引擎盖下创建了两个迭代器。使用其中一个来窥视,消耗其中的物品,而内容“保留”在另一只中。
In [10]: g = (i for i in range(5))
In [11]: a,b = itertools.tee(g)
In [12]: next(a)
Out[12]: 0
In [13]: next(a)
Out[13]: 1
In [14]: next(a)
Out[14]: 2
In [15]: next(b)
Out[15]: 0
Run Code Online (Sandbox Code Playgroud)
请注意next(b)return0而不是3,这是您正在寻找的行为
第三方more_itertools库有一个more_itertools.spy工具可以让你进行前瞻:
import more_itertools as mit
iterator = iter("abcdefg")
lookahead, iterable = mit.spy(iterator, 6)
lookahead[5]
# 'f'
Run Code Online (Sandbox Code Playgroud)
从源头来看,这个工具本质上实现了@inspectorG4dget 所描述的内容。也可以看看more_itertools.peekable。