hig*_*dth 19 python list-comprehension recipe generator-expression
我可以在列表推导/生成器表达式中使用if和for
list(i for i in range(100) if i*i < 30)
Run Code Online (Sandbox Code Playgroud)
我知道这不是最有效的,但对我而言,因为条件可能要复杂得多,这只是一个例子.但是,这仍然经历了一百次迭代,并且只在前6中产生一个值.有没有办法告诉生成器表达式在哪里停止这样的事情:
list(i for i in range(100) while i*i < 30)
Run Code Online (Sandbox Code Playgroud)
但是,while在生成器表达式中不理解.所以,我的问题是,如何编写带有停止条件的生成器表达式,这样它就不会继续计算,即使它没有产生新的值.
daw*_*awg 25
因为takewhile()and 的语法dropwhile()并不是最清楚的,所以这里是你问题的实际例子:
>>> [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]
Run Code Online (Sandbox Code Playgroud)
知道itertools的作者质疑是否弃用这些函数.