【发布时间】:2011-07-27 05:27:32
【问题描述】:
我可以在列表推导/生成器表达式中使用if 和for
list(i for i in range(100) if i*i < 30)
我知道这不是最有效的,但请耐心等待,因为情况可能要复杂得多,这只是一个示例。但是,这仍然要经过一百次迭代,并且只在前 6 次中产生一个值。有没有办法告诉生成器表达式在哪里停止,如下所示:
list(i for i in range(100) while i*i < 30)
但是,while 在生成器表达式中无法理解。所以,我的问题是,我如何编写一个带有停止条件的生成器表达式,以便它不会继续计算,即使它不会产生新值。
【问题讨论】:
-
请注意:使用
[i for i in range(100)]可以直接生成列表 -
奇怪的是,在提出这个问题时,PEP3142 是开放的。给出的用例几乎就是这个。 Guido 在 2013 年 5 月对其进行了核爆
标签: python list-comprehension recipe generator-expression