【发布时间】:2016-11-19 19:31:36
【问题描述】:
在使用无限生成器时,我可以使用if 来阻止项目进入列表,但不是为了打破循环。
这实际上会崩溃并挂起。甚至KeyboardInterrupt 也救不了我(顺便说一句,为什么?)
import itertools
a = [x for x in itertools.count() if x<10]
如果我使用自己的无限生成器
def mygen():
i=0
while True:
yield i
i +=1
这将持续到KeyboardInterrupt
a = [x for x in mygen() if x<10]
现在,显然对于正确的for 循环,我们可以在满足条件时中断
a = []
for x in itertools.count():
a.append(x)
if x>9:
break
所以我的问题是:有没有办法打破列表理解?
【问题讨论】:
-
列表推导不是千里眼。
[x for x in itertools.count() if x<10]将尝试遍历count对象中的所有项目,并且只返回那些小于10的项目。它会一直持续下去。 . .
标签: python