如果我在每个循环的生成器中完成了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只是让它更容易阅读.另外,如果有办法,你会如何设置多个变量?
如果以前曾被问过,请道歉,但我已经四处寻找并没有找到任何东西.
解决这种昂贵操作的一种方法是将生成器嵌套在列表理解中,例如,该列表理解仅用作过滤器
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)