在python list comprehension中设置变量

Pet*_*ter 0 python generator

如果我在每个循环的生成器中完成了2或3个相同的计算,有没有办法将它们设置为变量?

一个简单的例子是这样的:

#Normal
[len( i ) for i in list if len( i ) > 1]

#Set variable
[x for i in list if x > 1; x = len( i )]
Run Code Online (Sandbox Code Playgroud)

在任何人说len( i )这么快之前,差异可以忽略不计,我也意味着进行其他计算,使用len只是让它更容易阅读.另外,如果有办法,你会如何设置多个变量?

如果以前曾被问过,请道歉,但我已经四处寻找并没有找到任何东西.

Cor*_*mer 6

解决这种昂贵操作的一种方法是将生成器嵌套在列表理解中,例如,该列表理解仅用作过滤器

def foo(x):       # assume this function is expensive
    return 2*x

>>> [j for j in (foo(i) for i in range(6)) if j > 4]
#                ^ only called once per element
[6, 8, 10]
Run Code Online (Sandbox Code Playgroud)

在你的例子中使用类似的函数和变量,你就可以了

[x for x in (len(i) for i in list) if x > 1]
Run Code Online (Sandbox Code Playgroud)