可以从Python列表推导中捕获返回的值以使用条件吗?

Joe*_*Joe 7 python list-comprehension

我想在列表推导中构造一个值,但也要过滤该值.例如:

[expensive_function(x) for x in generator where expensive_function(x) < 5]
Run Code Online (Sandbox Code Playgroud)

我想避免expensive_function每次迭代调用两次.

generator会返回一个无穷级数,并列表内涵没有懒洋洋地评估.所以这不起作用:

[y in [expensive_function(x) for x in generator where expensive_function(x)] where y < 5]
Run Code Online (Sandbox Code Playgroud)

我可以用另一种方式写,但是对于列表理解感觉是正确的,我确信这是一种常见的使用模式(可能与否!).

Eth*_*man 10

如果generator可能是无限的,则您不希望使用列表推导.并非所有事情都必须是一线的.

def filtered_gen(gen):
    for item in gen:
        result = expensive_function(item)
        if result < 5:
            yield result
Run Code Online (Sandbox Code Playgroud)

  • 应该将`item`的最后两次出现替换为`result`吗? (2认同)