Gibt es in Python 3.x einige a
, b
so dass max(a, b) != max(b, a)
?
a
und b
sollte vom integrierten Python-Typ sein und keine Konvertierung enthalten.
Der Typ von a
und b
kann sein: num, float, bool, list, tuple ...
Beispiel:
a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong
max
ist eine eingebaute Funktion, die ein iterierbares Objekt als Eingabe verwendet. Also,a,b
ist das gleiche wieb,a
dahermax(a,b)
gleich sein mussmax(b,a)
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üssenclass
.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.Antworten:
Dies erfüllt alle Kriterien:
Dies liegt daran, dass andere Vergleiche als
!=
oderis
mitfloat("nan")
immer false zurückgeben.Im Allgemeinen können wir haben,
max(a, b) != max(b, a)
wenn die Art (en) vona, b
keine 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:Diese technisch hat nicht
max(a, b) != max(b, a)
da1 == True
, aber es gibt noch einen beobachtbare Unterschied:quelle
float("nan")
nicht eingebaut ist, was ist es dann? Es ist sicherlich eingebaut.float('nan')
ist ein float. Es stehtfloat
genau dort, also bin ich mir nicht sicher, was Sie sonst noch erwartet haben. Sie können es überprüfen,type
wenn Sie möchten.max
Verhalten ist ein Artefakt, das es anders definiert als Cfmax
(was die NaN-Ausbreitung garantiert), stattdessen als etwas,a<b ? b : a
das immer dann erzeugt wird,a
wenn der Vergleich falsch ist. NaN ist "ungeordnet". jede andere Zahl, soa < NaN
ist immer falsch, und so istNaN < b
Gemäß der Dokumentation führt die Verwendung von
max
On-Sets zu undefinierten Ergebnissen:Hier ist ein Beispiel,
Ausgabe
quelle
min
undmax
) oder eine Reihenfolge (fürsorted
) zurückgegeben.