问题很简单,我有一个返回列表的方法。 我想迭代这个列表中的每个项目,完成后, 调用该方法接收新列表,然后重复。
目前,我的代码如下所示:
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/