在不影响第一个迭代器的情况下继续使用其他迭代器

时间:2018-08-05 14:13:03

标签: python iterator

我正在使用iter函数创建一个迭代器,并使用该迭代器迭代几个步骤。

然后我想使用不同的迭代器从同一位置继续进行迭代,而不会影响原始的迭代器对象。

示例:

考虑迭代器对象org_iter

>>> a = [1,2,3,4,5]
>>> org_iter = iter(a)

对其进行反复:

>>> next(org_iter)
1
再次使用iter给出迭代器的相同实例,而不是同一位置的迭代器:

>>> new_iter = iter(org_iter)
>>> next(new_iter)  # continuing 
2
>>> next(org_iter)  # "org_iter is new_iter"
3

由于注释而进行编辑:使用itertools.tee也不起作用:

>>> new_iter = itertools.tee(org_iter)
>>> next(new_iter[0])
2
>>> next(org_iter)
3

通过使用不同的变量来保存索引号并+=1对其进行实现,可以实现相同的功能。

或使用enumerate函数和嵌套的for循环。

但是我特别询问直接使用迭代器对象的问题。

1 个答案:

答案 0 :(得分:1)

我不使用任何外部模块就能想到的一种方法是:

>>> a = [1, 2, 3, 4, 5]
>>> org_iter = iter(a)
>>> id(org_iter)
58713584
>>> new_iter = iter(list(org_iter))
>>> id(new_iter)
58299600