#python #list #lambda
#python #Список #лямбда
Вопрос:
Я пытаюсь использовать лямбды для применения к функции над списком в python, и мне было интересно, выполняет ли лямбда-выражение, которому передается функция в качестве параметра, этот параметр функции на каждой итерации. Например:
func = lambda i, min, max: (i - min) / (max - min)
arr = [func(i, min(arr), max(arr)) for i in arr]
Будет ли выполняться этот блок кода min(arr)
и max(arr)
каждая итерация цикла for? Если это так, это будет означать min(arr)
, что и max(arr)
вызываются len(arr)
раз, что является избыточным. Если это так, было бы лучше просто сохранить min(arr)
и max(arr)
и передать значение лямбде? Любая помощь будет оценена!
Комментарии:
1. Да, в понимании списка вы пересчитываете
min(arr)
иmax(arr)
для каждого элемента; и это сэкономит вашей программе некоторую работу, если вы вместо этого поместите их в переменные.2. Это не имеет никакого отношения к
lambda
. Независимо от того, чтоfunc
было или как вы это определили,min(arr)
иmax(arr)
будет выполняться повторно на каждой итерации понимания списка.
Ответ №1:
Да, в понимании списка вы пересчитываете min(arr)
и max(arr)
для каждого элемента; и это сэкономит вашей программе некоторую работу, если вы вместо этого поместите их в переменные.
Фактически, вычисление min
or max
— это операция O (n), поэтому их предварительное вычисление сначала изменяет этот фрагмент кода с O (n2) на O (n).
imin = min(arr)
imax = max(arr)
arr = [func(i, imin, imax) for i in arr]