In Python 2, numerische Werte immer sortieren, bevor Strings und fast alle anderen Typen:
>>> sorted(['a', 5])
[5, 'a']
Zahlen dann werden kleiner als Strings betrachtet. Bei Verwendung von max()
bedeutet dies, dass die Zeichenfolge über eine Zahl ausgewählt wird.
Dass Zahlen kleiner sind, ist eine willkürliche Implementierung Wahl. Siehe Comparisons documentation:
Die Betreiber <
, >
, ==
, >=
, <=
und !=
die Werte von zwei Objekten zu vergleichen. Die Objekte müssen nicht den gleichen Typ haben. Wenn beide Zahlen sind, werden sie in einen gemeinsamen Typ konvertiert. Ansonsten werden Objekte verschiedener Typen immer ungleich verglichen und sind konsistent, aber willkürlich geordnet.
Kühne Betonung meins.
Python 2 hat wirklich versucht, heterogene Typen sortierbar zu machen, was viele Probleme verursacht hat, die schwer zu debuggen sind, wie Programmierer, die Integer mit Strings vergleichen und unerwartete Ergebnisse erhalten. Python 3 hat diesen Fehler korrigiert; Sie werden ein TypeError
stattdessen erhalten:
>>> max(5, 'a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() > int()
Ich habe written elsewhere about the ordering rules und sogar re-implemented the Python 2 rules for Python 3, wenn Sie wirklich jene zurück wollte.
Ähnliche: [Warum ist keiner der kleinste in Python?] (Http: // stackoverflow.com/q/22040724) –
möglich duplicate von [Wie vergleicht Python Zeichenfolge und int?] (http://stackoverflow.com/questions/3270680/how-does-python-compare-string-and-int) – lightandlight