【问题标题】:Iterate over list_iterator twice [duplicate]迭代list_iterator两次[重复]
【发布时间】:2014-02-12 13:28:21
【问题描述】:

我希望迭代 list_iterator 两次。当我目前尝试执行此操作时,迭代器第二次没有可迭代的内容。可以重置吗?

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

for i in l:
   print(i)

for i in l:
   print(i)

一个 list_iter 对象被传递给我希望在其中迭代两次的函数。传递 list_iterator 对象是不好的做法吗?

【问题讨论】:

  • 最好自己传递列表,不需要创建迭代器。
  • 迭代器是“使用和抛出”类型的对象
  • “传递 list_iterator 对象是不好的做法吗?” - 我的经验是,传递只能迭代一次的东西可能会引起一些混乱(即使是生成器和文件对象,接收者也不一定清楚他们得到了什么)。函数需要记录它们的输入是否需要多次迭代,以及它们的输出是否可以多次迭代。这是预期的,例如任何带有yield 的函数都会返回一些只能迭代一次的东西。你只需要确保你知道它是什么时候发生的。

标签: python python-3.x


【解决方案1】:

您始终可以使用itertools.tee 来获取可迭代对象的copies

阿拉

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多