2011-12-15 3 views
1

Я пытаюсь преобразовать функцию labda в обычную функцию, но не могу ее понять.lambda для преобразования функции в python

def closest(u): 
    return min(updated_unique_list, key=lambda v: len(set(u)^set(v))) 

как эта лаборатория и мин работают?
Я попытался понять из документов, но я хочу понять в этом примере и создать нормальную функцию вместо этой лямбда-функции.

+1

с помощью питона мин (...) мин (итерируемый [, ключ = FUNC]) -> значение мин (а, б, в, ... [, ключ = FUNC]) -> значение С помощью одного итерационного аргумента верните наименьший элемент. С двумя или более аргументами верните наименьший аргумент. – pyInTheSky

ответ

4

min найти минимальное значение итерации относительно функции. min(lst, key=func) в Python можно условно рассматривать как (игнорируя детали как вызов f как можно меньше или ходить по списку только один раз)

retval = lst[0] 
for item in lst: 
    if func(item) < func(retval): 
    retval = item 
return retval 

В вашем случае, он находит элемент v в updated_unique_list таким образом, что len(set(u)^set(v)) минимально.

Теперь ^ между двумя установленными являются их symmetric difference. set(u)^set(v) возвращает набор элементов, которые не отображаются как в u, так и в v. Размер результата будет равен нулю, если u и v равны и являются максимальными, если они не перекрываются вообще.

Таким образом, функция пытается найти объект в updated_unique_list, который имеет наиболее распространенные элементы с u.

Если вы хотите, чтобы «нормальная функция» просто расширила min согласно алгоритму, описанному выше.

+0

thanks.what us this f (items)? вы можете объяснить мне в терминах updated_unique_list = ["page", "text", "footer", "header", "title", "good morning"] и u = "the" – sam

+1

@sam: Извините, я имел в виду 'func (item) '(исправлено). Примените ключевую функцию к каждому элементу. В вашем случае 'func (" page ")' станет 'len (set (" page ")^set (" the "))'. – kennytm

Смежные вопросы