Как ключи работают в мин и макс?

Вопрос:

Я просматриваю следующую последовательность утверждений:

>>> a = range(10)
>>> min(a, key=lambda x: x < 5.3)
6
>>> max(a, key=lambda x: x < 5.3)
0

Мин и Макс дают полную противоположность тому, что я ожидал.

Документация python по min и max довольно схематична.

Может ли кто-нибудь объяснить мне, как работает “ключ”?

Лучший ответ:

Объяснение key аргумента

Ключ работает следующим образом:

a_list = ['apple', 'banana', 'canary', 'doll', 'elephant']

min(a_list, key=len)

возвращает 'doll' и

max(a_list, key=len)

возвращается 'elephant'

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

заявка

Если ваша функция возвращает логическое значение, например ваше, для min, оно вернет первое из минимума True или False (которое является False), которое будет 6 или первым из max (True), которое будет равно 0.

Чтобы увидеть это:

>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> import pprint
>>> pprint.pprint(dict((i, i<5.3) for i in a))
{0: True,
 1: True,
 2: True,
 3: True,
 4: True,
 5: True,
 6: False,
 7: False,
 8: False,
 9: False}

Зачем?

>>> min([True, False])
False
>>> max([True, False])
True

объяснение

Почему True больше, чем False?

>>> True == 1
True
>>> False == 0
True
>>> issubclass(bool, int)
True

Оказывается, True и False очень тесно связаны с 1 и 0. Они даже оценивают то же самое соответственно.

Ответ №1

потому что все значения имеют значение True или False. Поэтому выбирается первая из каждого.

min([True, 1, False, 0])

вернет False вместо 0 потому что оба имеют одинаковое значение, но False происходит сначала

В вашем коде используется key функция с только булевыми значениями, поэтому, для min, первое False происходит при числе 6. Так что это избранный.

Что вы, вероятно, хотите сделать, это:

min(x for x in range(10) if x < 5.3)

Оцените статью
TechArks.Ru
Добавить комментарий