Почему функция 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 шт):

Автор решения: Zhihar

зачем так сложно?

res = min(filter(lambda x: x != 0, values))
→ Ссылка
Автор решения: 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
→ Ссылка