Wie zu Sortieren (Liste, Tupel) von Listen/Tupel, indem das element an einem bestimmten index?
Habe ich einige Daten entweder in einer Liste von Listen oder eine Liste von Tupeln, wie diese:
data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]
Und ich möchte sozusagen das 2. element in der Teilmenge. Bedeutung, die Sortierung nach 2,5,8, wo 2
ist aus (1,2,3)
, 5
ist aus (4,5,6)
. Was ist der gemeinsame Weg, dies zu tun? Sollte ich speichern Tupel oder Listen in meiner Liste?
- In Bezug auf den "Soll ich speichern Tupel oder Listen in meiner Liste?", eine Faustregel ist, die Dinge so unveränderlich wie möglich. Wenn Sie müssen Sie nicht ändern die Teillisten, machen Sie Sie Tupel.
InformationsquelleAutor Stan | 2010-06-25
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
oder:
key=itemgetter(1)
und am Anfang der Datei:from operator import itemgetter
sort
hier ist eine MethodeList
- Objekt in der Python, der erhält eine lambda-Funktion, wie seinekey
parameter. Sie können es nennen wietup
odert
oder was auch immer Sie mögen und es wird immer noch funktionieren.tup
hier gibt index der Liste der Tupel, so1
bedeutet, dass die Sortierung wird durchgeführt, indem die zweiten Werte der Tupel aus der ursprünglichen Liste (2, 5, 8
).lambda
Ansatz, um einfacher zu sein als die unintuitiveitemgetter
Klasseitemgetter
nicht in der Tat angezeigt werden, schneller zu sein. Ich bin neugierig, warum das so ist. Meinem groben Verdacht, dass einlambda
hat die versteckten Kosten der Erfassung aller lokalen Variablen in einer closure-Kontext, während einitemgetter
Instanz nicht. tl;dr: verwenden Sie Immeritemgetter
, denn Schnelligkeit gewinnt.lambda
unditemgetter
verwendet in der Art hier.itemgetter
ist immer schneller alslambda
.itemgetter
- Klasse zum Sortieren 126% schneller im Durchschnitt als die entsprechendelambda
Funktion.data.sort(key=itemgetter(3,1))
Ich möchte nur hinzufügen zu Stephen ' s Antwort wenn Sie möchten, zu Sortieren das array von hoch zu niedrig, anderen Weg als in den vorstehenden Ausführungen ist nur hinzuzufügen das sich auf die Zeile:
und das Ergebnis wird wie folgt sein:
Für die Sortierung nach mehreren Kriterien, nämlich zum Beispiel durch die zweiten und Dritten Elemente in einem Tupel, lassen
und so definieren Sie eine lambda, liefert ein Tupel, das beschreibt, Priorität, zum Beispiel
Stephen ' s Antwort ist der, den ich verwenden würde. Der Vollständigkeit halber, hier ist die DSU (dekorieren-sort-undecorate) Muster-Liste Verstehens:
Oder, lapidar:
Wie bereits in der Python-Sortierung HowTo, wurde dies überflüssig, da Python 2.4, wenn die wichtigsten Funktionen verfügbar wurde.
In der Sortierung für eine Liste von Tupeln
(<word>, <count>)
fürcount
in absteigender Reihenfolgeword
in alphabetischer Reihenfolge:Ich benutze diese Methode:
und es gibt mir das Ergebnis:
Ohne lambda:
@Stephen 's Antwort ist auf den Punkt! Hier ist ein Beispiel zur besseren Visualisierung
Shout out für die Ready Player One fans! =)
key
ist eine Funktion, die aufgerufen wird, verwandeln sich die Sammlung der Gegenstände zum Vergleich.. wiecompareTo
- Methode in Java.Den übergebenen parameter-Taste muss etwas sein, dass ist aufrufbar. Hier ist die Verwendung von
lambda
erstellt eine anonyme Funktion (die ein callable).Die syntax von lambda-Ausdruck ist das Wort lambda, gefolgt von einer wiederholenden Namen eine einheitliche code-block.
Unten Beispiel, wir Sortieren eine Liste von Tupel, das hält die info-abt-Zeit, bestimmte Ereignis-und Schauspieler-Namen.
Wir Sortieren diese Liste nach Zeitpunkt des Ereignis - das ist das 0. element eines Tupels.
Hinweis -
s.sort([cmp[, key[, reverse]]])
sortiert die Elemente von s an Ortitemgetter()
ist etwas schneller als dielambda tup: tup[1]
, aber der Anstieg ist vergleichsweise Moderat (um 10 bis 25 Prozent).(IPython Sitzung)
Sortieren eines Tupels ist ganz einfach: