有没有办法打破列表理解?

时间:2016-07-16 21:01:26

标签: python

使用无限生成器时,我可以使用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

所以我的问题:是否有某种方法可以突破列表理解?

1 个答案:

答案 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(takewhileislice等......是要走的路......)