лямбда-преобразование функций в python - PullRequest
1 голос
/ 15 декабря 2011

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

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

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

1 Ответ

4 голосов
/ 15 декабря 2011

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)) является минимальным.

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

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

Если вы хотите "нормальную функцию", просто разверните min в соответствии с алгоритмом, который я описал выше.

...