lambda是否在每次迭代时执行函数参数?

时间:2020-10-01 13:36:03

标签: python list lambda

我试图使用lambda应用于python中的列表上的函数,并且想知道是否将通过函数作为参数传递的lambda每次迭代执行该函数参数。例如:

func = lambda i, min, max: (i - min) / (max - min) 
arr = [func(i, min(arr), max(arr)) for i in arr]

此代码块会在for循环的每次迭代中执行min(arr)max(arr)吗?如果是这样,那将意味着min(arr)max(arr)被称为len(arr)次,这是多余的。如果是这种情况,最好只保存min(arr)max(arr)并将值传递给lambda更好吗?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

是的,在列表理解中,您正在为每个元素重新计算min(arr)max(arr);如果将它们放在变量中,它将为您的程序节省一些工作。

实际上,计算minmax是O(n)运算,因此,预先计算它们首先将这段代码从O(n 2 )更改为O(n)。

imin = min(arr)
imax = max(arr)
arr = [func(i, imin, imax) for i in arr]
相关问题