for-loop - Python 嵌套 for 循环与用于重复迭代函数提供的列表的生成器

标签 for-loop iterator python

问题很简单,我有一个返回列表的方法。 我想迭代这个列表中的每个项目,完成后, 调用该方法接收新列表,然后重复。

目前,我的代码如下所示:

generator = iter([])
while Condition:
    try:
        item = next(generator)
    except StopIteration:
        generator = iter(list_returining_method())
        item = next(generator)
    ...

但是,之前我使用的是嵌套 for 循环。

while Condition:
    for item in list_returining_method():
        ...

虽然我之前的尝试在某些方面看起来更好,但我当前的方法有一些“优点”:

  • 如果 Condition 设置为 false,则循环结束,而不必 break 跳出 for 循环。
    • 上述原因的延伸,可以访问 Condition 的方法可以结束循环,无需遍历所述列表中的所有其他项目,或在 for 循环中实现特殊检查。
  • 第一种方法允许在需要时跳过循环中的项目。
  • 还少了一级缩进。这比其他任何东西都更虚荣,但考虑到实际代码是类方法的一部分,缩进级别已经相当高了。

至少可以说,我很困惑哪个更合适。它们似乎都有独特的优点和缺点,所以如果有人知道最正确和Pythonic 的方法,我真的很感激。

最佳答案

我建议你使用一些迭代器

items = itertools.chain.from_iterable( iter(list_returning_method, None) )

for item in items:
    # do something with item
    print item

    if not Condition:
       break

iter(callable, sentinel) 返回一个迭代器,该迭代器生成 callable() 的结果,直到返回 Sentinel。

itertools.chain.from_iterable 返回一个扁平化原始迭代器的迭代器,它将生成第一个迭代器生成的列表中的值。

我认为这为您提供了您的方法的大部分优点,但风格更简洁。

关于for-loop - Python 嵌套 for 循环与用于重复迭代函数提供的列表的生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934854/

相关文章:

python - 循环遍历 networkx 中的连接组件并提取包含某些节点的组件

C代码函数调用不起作用

c++ - 迭代器实现

c++:从元素指针中减去迭代器以获得有效索引是否有效?

python - 我应该使用事件、信号量、锁、条件或其组合来管理安全退出我的多线程 Python 程序吗?

c++ - 不同的结果取决于 C++ 中 for 循环的循环索引的位置

ios - 我不能在 Swift 中调用多个应用程序消息

scala - 如何在 Scala 中组合 2 个迭代器?

python - 将值从 C++ 发送回 Python

python - django教程: unexpected indent error