gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:02 25 4
gpt4 key购买 nike

问题很简单,我有一个返回列表的方法。我想遍历此列表中的每个项目,一旦完成,调用接收新列表的方法,并重复。

目前,我的代码看起来像这样:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com