表达条件有界循环的更pythonic方式?

msw*_*msw 5 python coding-style

我有一个循环,想要执行到耗尽或直到达到一些用户指定的限制.我有一个看起来不好的结构,但我似乎找不到更优雅的表达方式; 有吗?

def ello_bruce(limit=None):
    for i in xrange(10**5):
        if predicate(i):
            if not limit is None:
                limit -= 1
                if limit <= 0:
                   break

def predicate(i):
    # lengthy computation
    return True
Run Code Online (Sandbox Code Playgroud)

神圣的筑巢!一定有更好的方法.出于工作示例的目的,xrange使用我通常具有有限但未知长度的迭代器(并且谓词有时返回False).

bca*_*cat 11

也许这样的事情会好一点:

from itertools import ifilter, islice

def ello_bruce(limit=None):
    for i in islice(ifilter(predicate, xrange(10**5)), limit):
        # do whatever you want with i here
Run Code Online (Sandbox Code Playgroud)

  • 这太过分了一行; 原始代码更清晰.将筑巢分开是很有帮助的; `iter = ifilter(谓词,xrange(10**5))`然后`for is in islice(iter,limit)`. (6认同)