Benutzerdefinierte Python-Sortierfunktion für eine Liste

9

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:

  1. Zuerst nach Jahr sortieren

  2. 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) .

%Vor%

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?

    
Tanishq dubey 03.08.2015, 18:22
quelle

3 Antworten

5

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.

%Vor%

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.

    
Padraic Cunningham 03.08.2015, 18:25
quelle
2

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:

%Vor%

Ergebnis:

%Vor%

Und wenn Sie mit Iteratoren spielen wollen:

%Vor%     
JuniorCompressor 03.08.2015 18:33
quelle
0

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)

sortieren     
Simeon Visser 03.08.2015 18:32
quelle

Tags und Links