Как работает это выражение max () в Python? - PullRequest
2 голосов
/ 16 декабря 2009

Вот код:

a = [1,2,3,4]
b = {}
b[1] = 10
b[2] = 8
b[3] = 7
b[4] = 5
print max(a,key=lambda w: b[w])

Это распечатывает 1.

Я не понимаю, как здесь оценивается max(a,key=lambda w: b[w]); Я предполагаю, что для каждого значения i в a он находит соответствующее значение b [i] по

  1. сохранение текущего значения i как w в лямбда-функции
  2. получение соответствующего значения из b [i] и сохранение его в ключе.

Но тогда почему он печатает 1 вместо 11? Или почему не выводится 10, так как это действительно максимальное число?

Ответы [ 2 ]

9 голосов
/ 16 декабря 2009

max(a,...) всегда будет возвращать элемент a. Таким образом, результат будет либо 1,2,3, либо 4. Для каждого значения w в a ключевое значение равно b[w]. Наибольшее значение ключа равно 10, и это соответствует w, равному 1. Таким образом, max(a,key=lambda w: b[w]) возвращает 1.

0 голосов
/ 16 декабря 2009

Попробуйте:

a = [1,2,3,4]
b = {}
b[1] = 10
b[2] = 8
b[3] = 7
b[4] = 5
c = a + b.values()
print max(*c)
...