【发布时间】:2019-01-12 16:09:32
【问题描述】:
我正在使用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
可以通过使用不同的变量来保存索引号并+=1ing 来实现相同的功能。
或使用enumerate 函数和嵌套的for 循环。
但我特别问的是直接使用迭代器对象。
【问题讨论】:
-
您错误地使用了tee。你会做
it1, it2=itertools.tee(iter(a))然后它会按你的预期工作。一旦你使用了tee,你就不能再使用原来的迭代器了。 -
这不允许我从与原始迭代器相同的位置继续,我必须在开始时创建它们并迭代它们,这不是我的问题。我正在动态创建迭代器,我不知道我需要多少。
-
再次:只要您不使用原件,它就会按预期工作。尝试:
oi=iter(a)几个下一个然后执行i1,i2=itertools.tee(iter(oi))并且此时不要使用oi。i1和i2现在是oi所在的位置,并且可以从那里独立使用。 -
如果不清楚,也可以重用原来的名字:
oi,new_i=itertools.tee(iter(oi)),这样在功能上和保持原来是一样的。