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

时间:2015-04-21 01:15:47

标签: python python-2.7 iterator

让我们说我想看到迭代器的第五项,但我想留下所有项目。最好的方法是什么?有模块吗?我可能会破解一个创建新迭代器的函数,但我想知道它是否已经完成了?

2 个答案:

答案 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