Ist pythons sortierte () Funktion garantiert stabil?
Den Dokumentation nicht garantieren, dass. Gibt es irgendeinen anderen Ort, dass es dokumentiert ist?
Ich vermute, es könnte sein, stabil sein, da die sort-Methode von Listen ist garantiert stabil zu sein (Notizen 9. Punkt: "Ab Python 2.3, die sort () - Methode ist garantiert stabil zu sein"), und sortiert ist funktionell ähnlich. Allerdings bin ich nicht in der Lage zu finden keine definitive Quelle, die sagt so.
Zweck: ich brauche zu Sortieren, basiert auf einem primary key und auch einen sekundären Schlüssel in Fällen, in denen der Primärschlüssel gleich ist in beiden Datensätzen. Wenn sorted() wird garantiert, um stabil zu sein, ich kann irgendwie auf dem sekundären Schlüssel, dann Sortieren Sie die primary key-und das Ergebnis bekommen, das ich brauche.
PS: um Verwirrung Zu vermeiden, ich bin mit stabil in dem Sinne von "a sort ist stabil, wenn es garantiert nicht zu ändern, die relative Reihenfolge von Elementen, vergleichen, gleich".
InformationsquelleAutor der Frage sundar | 2009-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, die Absicht des Handbuchs ist in der Tat zu garantieren, dass
sorted
ist stabil und in der Tat, dass es genau verwendet den gleichen Algorithmus wie diesort
Methode. Mir ist klar, dass die docs nicht 100% darüber im klaren Identität; doc patches werden immer gerne angenommen!InformationsquelleAutor der Antwort Alex Martelli
Sind Sie stabil.
Übrigens: Sie manchmal ignorieren kann, zu wissen, ob das Sortieren und sortiert sind stabil, durch die Kombination eines multi-pass-sort in einer single-pass ein.
Zum Beispiel, wenn Sie möchten, zu Sortieren Objekte anhand Ihrer
last_name
first_name
Attribute, die Sie tun können, es in einem Durchgang:nutzen Tupel-Vergleich.
Diese Antwort, als-ist, umfasst die ursprüngliche Frage. Für weitere Sortier-Fragen, es ist die Python-Sortierung How-To.
InformationsquelleAutor der Antwort tzot
In der Dokumentation in der Zwischenzeit geändert (relevante Begehen) und der aktuellen Dokumentation von
sortiert
ausdrücklich garantiert es:Diesem Teil der Dokumentation Hinzugefügt wurde Python 2.7 und Python 3.4 (+) konform Implementierung der Sprache version sollte haben eine stabile
sorted
.Beachten Sie, dass für CPython die
list.sort
hat gewesen stabil seit Python 2.3Bin ich mir nicht 100% sicher, dass auf
sorted
heutzutage ist es einfach verwendetlist.sort
aber ich habe nicht geprüft, die Vorgeschichte. Aber es ist wahrscheinlich, dass es "immer" verwendetlist.sort
.InformationsquelleAutor der Antwort MSeifert
Den "Was ist Neu" - Dokumentation für Python 2.4 effektiv stellen Sie den Punkt, sortiert() zuerst wird eine Liste erzeugt, dann ruft sort() auf, indem Sie mit der Garantie müssen Sie aber nicht in die "offizielle" Dokumente. Man könnte auch einfach überprüfen Sie die Quelle, wenn Sie wirklich besorgt.
InformationsquelleAutor der Antwort Peter Hansen
Python 3.6 doc auf die Sortierung nun besagt, dass
Darüber hinaus in diesem Dokument, es ist ein link zu Stall Timsortdie besagt, dass
InformationsquelleAutor der Antwort Wolfgang Kuehn