我试图使用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更好吗?任何帮助将不胜感激!
答案 0 :(得分:0)
是的,在列表理解中,您正在为每个元素重新计算min(arr)
和max(arr)
;如果将它们放在变量中,它将为您的程序节省一些工作。
实际上,计算min
或max
是O(n)运算,因此,预先计算它们首先将这段代码从O(n 2 )更改为O(n)。
imin = min(arr)
imax = max(arr)
arr = [func(i, imin, imax) for i in arr]