Существуют ли такие a, b, что max (a, b)! = Max (b, a)? [закрыто]

11

В 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

источник
1
Ваш вопрос не ясен
seralouk
Я не думаю, что есть ... maxвстроенная функция, которая принимает итеративный объект в качестве входных данных. Таким образом, a,bто же самое, что, b,aследовательно, max(a,b)должно быть равнымmax(b,a)
Anwarvic
1
Это хороший вопрос, но вы должны отредактировать его и объяснить больше
El.Hum
2
Ваше редактирование имеет смысл только в контексте вашего комментария ниже наиболее высоко оцененного ответа. Там и здесь вы не можете утверждать, что float('nan')это не встроенный тип. Я бы предположил, что «встроенный тип» будет означать все, что вы можете создать без необходимости создания нового class.
Teepeemm
2
Если вы хотите исключить float('nan'), то почему? Чтобы было ясно, вы можете задать вопрос, в котором вы исключаете что-то вроде, float('nan')если хотите; это не проблема. Проблема в том, что никто не уверен, что ты пытаешься спросить.
Nat

Ответы:

17

Это удовлетворяет всем критериям:

>>> max(1.0, float("nan"))
1.0

>>> max(float("nan"), 1.0)
nan

Это происходит потому , что какое - либо другое , чем сравнение !=или isс float("nan")всегда возвращает ложь.

В более общем смысле, мы можем иметь, max(a, b) != max(b, a)когда тип (ы) a, bне обеспечивают общий заказ. Как указывает Даниэль Месехо, наборы также обладают этим свойством. Для множеств <означает «строгое подмножество», но с {1, 2}и {3, 4}ни один не является строгим подмножеством другого, поэтому:

>>> max({1, 2}, {3, 4})
{1, 2}

>>> max({3, 4}, {1, 2})
{3, 4}

Этого технически нет, max(a, b) != max(b, a)потому что 1 == Trueесть заметная разница:

>>> max(True, 1)
True

>>> max(1, True)
1
orlp
источник
1
ВАУ ... почему это ??
Anwarvic
7
@ stackFF4 если float("nan")не встроенный, то что это? Это, конечно, встроенный.
Саняш
9
@ stackFF4: float('nan')это число с плавающей точкой. floatТам написано , так что я не уверен, что еще ты ожидал. Вы можете проверить это, typeесли хотите.
user2357112 поддерживает Monica
1
@Anwarvic: Интересно, что это не вещь Python, а на самом деле, как поплавки реализованы в оборудовании. NaN сравнивает ложь со всем практически на каждом языке программирования.
Mooing Duck
2
@Nat: Но никто не хочет исключения в большинстве случаев. Это maxповедение является артефактом определения его по-другому, чем C fmax(который гарантирует распространение NaN), а не как что-то подобное, a<b ? b : aкоторое всегда производит, aкогда сравнение ложно. NaN "неупорядоченный" по отношению к любое другое число, поэтому a < NaNвсегда ложно, и такNaN < b
Питер Кордес
5

Согласно документации , использование maxнаборов дает неопределенные результаты:

Соответственно, наборы не являются подходящими аргументами для функций, которые зависят от общего порядка (например, min (), max () и sorted () дают неопределенные результаты, учитывая список наборов в качестве входных данных).

Вот пример,

a = {1, 2}
b = {2, 3}
print(max(b, a) != max(a, b))

Вывод

True
Дани Месехо
источник
Здесь, возможно, стоит отметить, что «неопределенные результаты», вероятно, более разумны в Python, чем в некоторых других языках. Никакие носовые демоны , вероятно, не будут, и это, вероятно, даже не вызовет исключения. Он просто возвращает в основном произвольное значение (для minи max) или порядок (для sorted).
Blckknght