我可以用if
and 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
在生成器表达式中不被理解。所以,我的问题是,如何编写带有停止条件的生成器表达式,以便它不会继续计算,即使它不会产生新值。
因为语法为takewhile()
and dropwhile()
不是clearest,以下是您的问题的实际示例:
>>> [i for i in itertools.takewhile(lambda x: x*x<30, range(10))]
[0, 1, 2, 3, 4, 5]
>>> [i for i in itertools.dropwhile(lambda x: x*x<30, range(10))]
[6, 7, 8, 9]
知道itertools的作者已质疑 http://bytes.com/topic/python/answers/753516-fate-itertools-dropwhile-itertools-takewhile是否弃用这些功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)