@bzupnick, benutze key=lambda x:x[2].casefold(). Wenn Ihr Python nicht neu genug ist, verwenden Sie einfach .lower()anstelle von.casefold()
John La Rooy
x = [[[5,3], 1,0345], [[5,6], 5,098], [[5,4], 4,89], [[5,1], 5,97]] Mit einer solchen Liste ist can wir sortieren mit itemgetter () in Bezug auf Elemente in x [0] [1]?
nidHi
Kann ich auch die Indizes der Sortierung abrufen, um eine andere verwandte Liste von Listen in derselben Reihenfolge zu sortieren?
Quarky
@quaryk Es klingt nach einer interessanten Frage, die aber in den Kommentaren nicht beantwortet werden kann. Wenn Sie keine entsprechende Frage finden, sollten Sie eine erstellen.
John La Rooy
175
an Ort und Stelle
>>> l =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]>>> l.sort(key=lambda x: x[2])
Könnten Sie mehr Details über in placeund geben not in place?
qun
9
@qun, "an Ort und Stelle" bedeutet, dass der Speicher der alten Liste für die sortierte wiederverwendet wird. "nicht vorhanden" bedeutet, dass die alte Liste unverändert bleibt und eine neue Liste erstellt wird.
John La Rooy
x = [[[5,3], 1,0345], [[5,6], 5,098], [[5,4], 4,89], [[5,1], 5,97]] Mit einer Liste wie dieser ist, Wie können wir in Bezug auf Elemente in x [0] [1] sortieren?
nidHi
81
Mit Itemgetter können Sie nach mehreren Kriterien / Spalten sortieren:
Ich denke, diese Antwort ist sehr wichtig. Ich denke, Leute, die versuchen, nach Indizes für innere Arrays zu sortieren, werden hierher fallen, aber Leute, die nach MEHREREN Indizes für innere Arrays sortieren möchten, werden hier beginnen, und Ihre Antwort hat mir geholfen zu sehen, dass Itemgetter das tatsächlich für Sie tun wird!
ZekeDroid
11
Mehrere Kriterien können auch über die Lambda-Funktion implementiert werden
Ich denke, die Lambda-Funktion kann Ihr Problem lösen.
old_list =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])#Resulst of new_list will be:[[9,4,'afsd'],[0,1,'f'],[4,2,'t']]
**old_list =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])**
Korrigieren Sie mich, wenn ich falsch liege, aber nicht das 'x [2]' das 3. Element in der Liste aufruft, nicht das 3. Element in der verschachtelten Liste? sollte es x [2] [2] sein?
Nein, da key / lambda bereits die Elemente in der Liste der ersten Ebene durchläuft. x ist eine lokale Variable, die nacheinander an jedes Element gebunden ist.
DragonLord
1
Einfacher zu verstehen (Was macht Lambda eigentlich):
ls2=[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]def thirdItem(ls):#return the third item of the listreturn ls[2]#Sort according to what the thirdItem function return
ls2.sort(key=thirdItem)
Hier wird das Sortieren eines mehrdimensionalen Arrays ausgeführt
arr=[[2,1],[1,2],[3,5],[4,5],[3,1],[5,2],[3,8],[1,9],[1,3]]
arr.sort(key=lambda x:x[0])
la=set([i[0]for i inPoints])for i in la:
tempres=list()for j in arr:if j[0]==i:
tempres.append(j[1])for j in sorted(tempres,reverse=True):print(i,j)
Antworten:
Dies ist ein Job für Itemgetter
Es ist auch möglich, hier eine Lambda-Funktion zu verwenden, jedoch ist die Lambda-Funktion in diesem einfachen Fall langsamer
quelle
key=lambda x:x[2].casefold()
. Wenn Ihr Python nicht neu genug ist, verwenden Sie einfach.lower()
anstelle von.casefold()
an Ort und Stelle
nicht vorhanden mit sortiert:
quelle
in place
und gebennot in place
?Mit Itemgetter können Sie nach mehreren Kriterien / Spalten sortieren:
quelle
Mehrere Kriterien können auch über die Lambda-Funktion implementiert werden
quelle
Mit diesem Snippet können Sie einfach sortieren, wobei 1 der Index des Elements ist.
quelle
So was:
quelle
Ich denke, die Lambda-Funktion kann Ihr Problem lösen.
quelle
Korrigieren Sie mich, wenn ich falsch liege, aber nicht das 'x [2]' das 3. Element in der Liste aufruft, nicht das 3. Element in der verschachtelten Liste? sollte es x [2] [2] sein?
quelle
Einfacher zu verstehen (Was macht Lambda eigentlich):
quelle
Hier wird das Sortieren eines mehrdimensionalen Arrays ausgeführt
quelle