Ich habe eine Liste, die so aussieht:
['Fall 2014', 'Spring 2015', 'Fall 2008', 'Spring 2008']
Und wenn sortiert, sollte die Liste wie folgt aussehen:
['Spring 2015', 'Fall 2014', 'Spring 2008', 'Fall 2008']
Daher lauten die Sortierregeln:
Zuerst nach Jahr sortieren
Nach Jahreszeit sortieren, wo Frühling zuerst ist, dann Fall.
Ich habe momentan eine Funktion namens lcmp
, die ich auf meiner Liste verwende: myList.sort(lcmp)
.
Dies funktioniert für die Sortierung nach Jahr, funktioniert aber nicht für die Saison, obwohl ich diese Art der Sortierung angegeben habe. Warum passiert das?
Verwenden Sie einfach -year
, um die Sortierung nach Jahr als ersten Schlüssel und das Ergebnis von seas != "Spring"
umzukehren, um die Bindungen mit key=sort_function
zu brechen.
Es gibt keine Möglichkeit, dass Ihre Funktion funktioniert, auch wenn Sie myList.sort(key=lcmp)
verwenden, da Sie einzelne Zeichenfolgen übergeben, sodass Sie a und b nicht teilen müssen. Dies funktioniert auch für Python 2 oder 3.
Einer der Fehler besteht darin, dass Sie nicht korrekt auf Gleichheit prüfen. Was geben Sie zurück, wenn c[1] < d[1]
und c[0] < d[0]
? Die Antwort ist Null, was falsch ist. Außerdem sollten Sie cmp
argument in sort deklarieren. Was Sie tun können, ist Folgendes:
Ergebnis:
%Vor%Und wenn Sie mit Iteratoren spielen wollen:
%Vor%Sie sollten auch die Fälle berücksichtigen, in denen die verglichenen Werte gleich sind:
%Vor% Sie können die Daten dann mit myList.sort(lcmp)
oder myList.sort(cmp=lcmp)