В python 3.x есть такие a
, b
такие max(a, b) != max(b, a)
?
a
и b
должен иметь встроенный тип Python и не содержать никаких преобразований.
Тип a
и b
может быть: num, float, bool, list, tuple ...
Пример:
a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong
max
встроенная функция, которая принимает итеративный объект в качестве входных данных. Таким образом,a,b
то же самое, что,b,a
следовательно,max(a,b)
должно быть равнымmax(b,a)
float('nan')
это не встроенный тип. Я бы предположил, что «встроенный тип» будет означать все, что вы можете создать без необходимости создания новогоclass
.float('nan')
, то почему? Чтобы было ясно, вы можете задать вопрос, в котором вы исключаете что-то вроде,float('nan')
если хотите; это не проблема. Проблема в том, что никто не уверен, что ты пытаешься спросить.Ответы:
Это удовлетворяет всем критериям:
Это происходит потому , что какое - либо другое , чем сравнение
!=
илиis
сfloat("nan")
всегда возвращает ложь.В более общем смысле, мы можем иметь,
max(a, b) != max(b, a)
когда тип (ы)a, b
не обеспечивают общий заказ. Как указывает Даниэль Месехо, наборы также обладают этим свойством. Для множеств<
означает «строгое подмножество», но с{1, 2}
и{3, 4}
ни один не является строгим подмножеством другого, поэтому:Этого технически нет,
max(a, b) != max(b, a)
потому что1 == True
есть заметная разница:источник
float("nan")
не встроенный, то что это? Это, конечно, встроенный.float('nan')
это число с плавающей точкой.float
Там написано , так что я не уверен, что еще ты ожидал. Вы можете проверить это,type
если хотите.max
поведение является артефактом определения его по-другому, чем Cfmax
(который гарантирует распространение NaN), а не как что-то подобное,a<b ? b : a
которое всегда производит,a
когда сравнение ложно. NaN "неупорядоченный" по отношению к любое другое число, поэтомуa < NaN
всегда ложно, и такNaN < b
Согласно документации , использование
max
наборов дает неопределенные результаты:Вот пример,
Вывод
источник
min
иmax
) или порядок (дляsorted
).