Python 使用不同的迭代器继续执行迭代器,而不影响第一个迭代器

Python 使用不同的迭代器继续执行迭代器,而不影响第一个迭代器,python,iterator,Python,Iterator,我正在使用函数创建一个迭代器,并使用迭代器迭代几个步骤 然后,我希望在不影响原始迭代器对象的情况下,使用不同的迭代器从同一位置继续迭代 例如: 考虑迭代器对象org\u iter: >>> a = [1,2,3,4,5] >>> org_iter = iter(a) 对其进行迭代: >>> next(org_iter) 1 再次使用iter给出迭代器的相同实例,而不是来自同一位置的不同实例: >>> new_iter =

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

然后,我希望在不影响原始迭代器对象的情况下,使用不同的迭代器从同一位置继续迭代

例如:

考虑迭代器对象
org\u 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
编辑,因为注释:使用也不起作用:

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

同样的功能也可以通过使用不同的变量来保存索引编号并
+=1

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


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

在不使用任何外部模块的情况下,我可以想到的一种方法是:

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

这会破坏
org\u iter
,执行
next(org\u iter)
会导致
StopIteration
异常。您的使用不正确。您将执行
it1,it2=itertools.tee(iter(a))
,然后它将按照您的预期工作。一旦您使用了
tee
,您就不能使用原始迭代器。这不允许我从原始迭代器的相同位置继续,我必须在开始时创建这两个迭代器并对它们进行迭代,这不是我的问题。我正在动态创建迭代器,我不知道需要多少迭代器。再说一次:只要不使用原始迭代器,它就可以正常工作。尝试:
oi=iter(a)
nexts,然后执行
i1,i2=itertools.tee(iter(oi))
,此时不要使用
oi
i1
i2
现在是
oi
的位置,可以独立使用。如果不清楚,您也可以重用原始名称:
oi,new_i=itertools.tee(iter(oi))
,因此它在功能上与保留原始名称相同。