Gibt es a, b, so dass max (a, b)! = Max (b, a)? [geschlossen]

11

Gibt es in Python 3.x einige a, bso dass max(a, b) != max(b, a)?

aund bsollte vom integrierten Python-Typ sein und keine Konvertierung enthalten.

Der Typ von aund bkann sein: num, float, bool, list, tuple ...

Beispiel:

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

quelle
1
Ihre Frage ist nicht klar
Seralouk
Ich glaube nicht, dass es eine gibt ... maxist eine eingebaute Funktion, die ein iterierbares Objekt als Eingabe verwendet. Also, a,bist das gleiche wie b,adaher max(a,b)gleich sein mussmax(b,a)
Anwarvic
1
Dies ist eine gute Frage, aber Sie sollten sie bearbeiten und näher erläutern
El.Hum
2
Ihre Bearbeitung ist nur im Kontext Ihres Kommentars unter der am häufigsten bewerteten Antwort sinnvoll. Hier und hier kann man nicht argumentieren, dass dies float('nan')kein eingebauter Typ ist. Ich würde annehmen, dass "eingebauter Typ" alles bedeutet, was Sie erstellen können, ohne einen neuen erstellen zu müssen class.
Teepeemm
2
Wenn Sie ausschließen möchten float('nan'), warum dann? Um klar zu sein, dürfen Sie eine Frage stellen, bei der Sie etwas ausschließen, float('nan')wenn Sie möchten. das ist nicht das problem Das Problem ist nur, dass niemand sicher ist, was Sie fragen wollen.
Nat

Antworten:

17

Dies erfüllt alle Kriterien:

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

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

Dies liegt daran, dass andere Vergleiche als !=oder ismit float("nan")immer false zurückgeben.

Im Allgemeinen können wir haben, max(a, b) != max(b, a)wenn die Art (en) von a, bkeine Gesamtbestellung liefern. Wie Daniel Mesejo betont, haben Sets auch diese Eigenschaft. Für Mengen <bedeutet "strenge Teilmenge", aber mit {1, 2}und {3, 4}keine ist eine strenge Teilmenge der anderen, also:

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

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

Diese technisch hat nicht max(a, b) != max(b, a)da 1 == True, aber es gibt noch einen beobachtbare Unterschied:

>>> max(True, 1)
True

>>> max(1, True)
1
orlp
quelle
1
WOW ... warum ist das so?
Anwarvic
7
@ stackFF4 wenn float("nan")nicht eingebaut ist, was ist es dann? Es ist sicherlich eingebaut.
Sanyash
9
@ stackFF4: float('nan')ist ein float. Es steht floatgenau dort, also bin ich mir nicht sicher, was Sie sonst noch erwartet haben. Sie können es überprüfen, typewenn Sie möchten.
user2357112 unterstützt Monica
1
@Anwarvic: Interessanterweise handelt es sich nicht um eine Python-Sache, sondern darum, wie Floats in Hardware implementiert werden. NaN vergleicht false mit allem in fast jeder Programmiersprache.
Mooing Duck
2
@ Nat: Aber niemand will die meiste Zeit Ausnahmen. Dieses maxVerhalten ist ein Artefakt, das es anders definiert als C fmax(was die NaN-Ausbreitung garantiert), stattdessen als etwas, a<b ? b : adas immer dann erzeugt wird, awenn der Vergleich falsch ist. NaN ist "ungeordnet". jede andere Zahl, so a < NaNist immer falsch, und so istNaN < b
Peter Cordes
5

Gemäß der Dokumentation führt die Verwendung von maxOn-Sets zu undefinierten Ergebnissen:

Dementsprechend sind Mengen keine geeigneten Argumente für Funktionen, die von der Gesamtreihenfolge abhängen (z. B. min (), max () und sortiert () führen bei einer Liste von Mengen als Eingaben zu undefinierten Ergebnissen).

Hier ist ein Beispiel,

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

Ausgabe

True
Dani Mesejo
quelle
Es könnte erwähnenswert sein, dass "undefinierte Ergebnisse" in Python wahrscheinlich vernünftiger sind als in einigen anderen Sprachen. Es sind wahrscheinlich keine Nasendämonen vorhanden , und es wird wahrscheinlich nicht einmal eine Ausnahme auslösen. Es wird nur ein meist beliebiger Wert (für minund max) oder eine Reihenfolge (für sorted) zurückgegeben.
Blckknght