Python hat zwei Arten von Sorten: eine Sortierverfahren (oder „Elementfunktion“) und eine Sortierfunktion . Die Sortiermethode verarbeitet den Inhalt des genannten Objekts. Stellen Sie sich das als eine Aktion vor, die das Objekt ausführt, um sich selbst neu zu ordnen . Die Sortierfunktion ist eine Operation über die von einem Objekt dargestellten Daten und gibt ein neues Objekt mit demselben Inhalt in einer sortierten Reihenfolge zurück.
Bei einer Liste von Ganzzahlen mit dem Namen wird l
die Liste selbst neu angeordnet, wenn wir Folgendes aufrufen l.sort()
:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> l.sort()
>>> l
[1, 5, 123, 213, 467, 2341]
Diese Methode hat keinen Rückgabewert. Aber was ist, wenn wir versuchen, das Ergebnis von zuzuweisen l.sort()
?
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = l.sort()
>>> print(r)
None
r
jetzt ist eigentlich nichts mehr. Dies ist eines dieser seltsamen, etwas nervigen Details, die ein Programmierer nach einer Abwesenheit von Python wahrscheinlich vergessen wird (weshalb ich dies schreibe, also ich es nicht wieder vergesse).
Die Funktion sorted()
hingegen ändert nichts am Inhalt von l
, gibt jedoch eine neue, sortierte Liste mit demselben Inhalt zurück wie l
:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = sorted(l)
>>> l
[1, 5, 2341, 467, 213, 123]
>>> r
[1, 5, 123, 213, 467, 2341]
Beachten Sie, dass es sich bei dem zurückgegebenen Wert nicht um eine tiefe Kopie handelt. Seien Sie daher bei Nebenwirkungen wie bei Elementen, die in der Liste enthalten sind, wie gewohnt vorsichtig:
>>> spam = [8, 2, 4, 7]
>>> eggs = [3, 1, 4, 5]
>>> l = [spam, eggs]
>>> r = sorted(l)
>>> l
[[8, 2, 4, 7], [3, 1, 4, 5]]
>>> r
[[3, 1, 4, 5], [8, 2, 4, 7]]
>>> spam.sort()
>>> eggs.sort()
>>> l
[[2, 4, 7, 8], [1, 3, 4, 5]]
>>> r
[[1, 3, 4, 5], [2, 4, 7, 8]]