Почему функция min в Python отрабатывает неправильно?
Нужно получить минимальное значение из tuple за исключением нулей. Написал вот такую функцию:
print(min(values, key=lambda x: x or max(values)))
если values=(1, 0, 1, 0), печатает 1, всё правильно, но если values = (0, 1, 0, 1, 1, 0), печатает 0. Подскажите, пожалуйста, в чём может быть проблема?
Ответы (2 шт):
Автор решения: nomnoms12
→ Ссылка
Так происходит потому, что у нуля вес получается таким же, как и у единицы:
values = (0, 1)
print(0 or max(values)) # 1
print(1 or max(values)) # 1
А функция возвращает первое найденное минимальное значение. Поэтому если 0 идёт раньше, чем 1, то он и возвращается:
The key argument specifies a one-argument ordering function like that used for list.sort().
If multiple items are minimal, the function returns the first one encountered.
Я бы на Вашем месте отфильтровал значения, например так:
values = (0, 1)
result = min(x for x in values if x != 0) # 1