遍历列表迭代器两次

4

我希望能够两次迭代list_iterator。但是当我尝试这样做时,第二次迭代器没有任何东西可以迭代。我能重置它吗?

l = iter(["1","2","3","4"])

for i in l:
   print(i)

for i in l:
   print(i)

我想在一个函数中进行两次迭代,所以需要传递一个list_iter对象。但是,传递list_iterator对象是否是不好的实践?


1
最好传递列表本身,不需要创建迭代器。 - Ashwini Chaudhary
1
迭代器是“使用即丢弃”类型的对象。 - thefourtheye
“传递list_iterator对象是不好的编程习惯吗?” - 我的经验是,传递只能迭代一次的东西(即使是生成器和文件对象)可能会导致一些混淆。函数需要记录它们的输入是否需要多次迭代,以及它们的输出是否可以多次迭代。例如,任何带有yield的函数都应该返回只能迭代一次的内容。你只需要确保你知道什么时候发生了这种情况。 - Steve Jessop
1个回答

3

您可以始终使用itertools.tee来获得可迭代对象的副本

Ala

l = iter(["1","2","3","4"])
# Don't use original....
original, new = tee(l)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接