如何“查看”迭代器,同时保留项目?

PyR*_*lez 6 python iterator python-2.7

假设我想查看迭代器的第五个项目,但我想保留所有项目。最好的方法是什么?有模块吗?我可能可以将一个函数组合在一起来创建一个新的迭代器,但我想知道它是否已经完成了?

ins*_*get 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,这是您正在寻找的行为


pyl*_*ang 5

第三方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