Чи є такі 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, кортеж ...

Приклад:

a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong

1
ваше питання не ясно
seralouk

Я не думаю, що існує якась ... maxце вбудована функція, яка приймає ітерабельний об'єкт як вхід. Отже, a,bце те саме, що b,aзвідси max(a,b)має дорівнюватиmax(b,a)
Анварвіч

1
Це гарне запитання, але вам слід відредагувати його та пояснити його більше
El.Hum

2
Ваша редакція має сенс лише в контексті Вашого коментаря під найбільш голосованою відповіддю. Там і тут ви не можете стверджувати, що float('nan')це не вбудований тип. Я б припустив, що "вбудований тип" означатиме все, що ви можете створити, не створюючи нового class.
Teepeemm

2
Якщо ви хочете виключити float('nan'), то чому? Щоб було зрозуміло, ви можете задати питання, з якого ви виключаєте щось на зразок, float('nan')якщо хочете; це не проблема. Проблема полягає лише в тому, що ніхто не впевнений, що ви намагаєтеся запитати.
Нат

Відповіді:


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

1
WOW ... чому це ??
Анварвіч

7
@ stackFF4, якщо float("nan")він не вбудований, то що це? Це, безумовно, вбудований.
sanyash

9
@ stackFF4: float('nan')це поплавок. Там написано floatпрямо, тож я не впевнений, що ще ти очікував. Ви можете перевірити це, typeякщо хочете.
user2357112 підтримує Моніку

1
@Anwarvic: Цікаво, що це не пітон, це насправді те, як поплавці реалізовані в апаратному забезпеченні. NaN порівнює false з усім майже в кожній мові програмування.
Mooing Duck

2
@Nat: Але більшість часу ніхто не хоче винятків. Така maxповедінка є артефактом, що визначає його інакше, ніж C fmax(що гарантує розповсюдження NaN), а не як щось подібне, a<b ? b : aяке завжди aстворюється, коли порівняння помилкове. NaN - "не упорядкований" Wrt. будь-яке інше число, так a < NaNце завжди неправдиво, так і єNaN < b
Пітер Кордес

5

Відповідно до документації , використання maxнаборів дає невизначені результати:

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

Ось приклад,

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

Вихідні дані

True

Тут, можливо, варто зазначити, що "невизначені результати", ймовірно, більш безпечні в Python, ніж в деяких інших мовах. Ніяких носових демонів немає, і це, мабуть, навіть не призведе до виключення. Він просто повертає в основному довільне значення (для minі max) або замовлення (для sorted).
Blckknght
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.