使用无限生成器时,我可以使用if
来阻止项目进入列表,但不是为了打破循环。
这实际上会崩溃并挂起。甚至KeyboardInterrupt
都不能救我(为什么BTW?)
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
所以我的问题:是否有某种方法可以突破列表理解?
答案 0 :(得分:7)
在不再满足条件后使用itertools.takewhile
停止迭代......:
import itertools
a = [x for x in itertools.takewhile(lambda L: L < 10, itertools.count())]
# a = list(itertools.takewhile(lambda L: < 10, itertools.count()))
有一种方法可以打破list-comp,因此限制iterable(takewhile
或islice
等......是要走的路......)