让我们说我想看到迭代器的第五项,但我想留下所有项目。最好的方法是什么?有模块吗?我可能会破解一个创建新迭代器的函数,但我想知道它是否已经完成了?
答案 0 :(得分:2)
我认为你想要的是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
请注意next(b)
返回0
而不是3
,这是您正在寻找的行为
答案 1 :(得分:1)
more_itertools
第三方库有一个more_itertools.spy
工具,可让您前瞻:
import more_itertools as mit
iterator = iter("abcdefg")
lookahead, iterable = mit.spy(iterator, 6)
lookahead[5]
# 'f'
从source开始,此工具实际上实现了@ inspectorG4dget所描述的内容。另见more_itertools.peekable
。