python sortierte Funktion mit benutzerdefinierten Cmp-Funktionen

8

Ich möchte die Elemente in einem Wörterbuch mit verschiedenen Komparatorfunktionen bestellen. Bitte beachten Sie meinen Beispielcode unten. Es ist der letzte Teil, der die Funktion cmpRatio mit sorted () verwendet, die nicht funktioniert. Ich bin mir nicht sicher, was ich falsch mache. Vielen Dank im Voraus für eine Idee!

%Vor%     
Ruxandra Palmtag 21.11.2012, 19:57
quelle

3 Antworten

6

Vermeiden Sie cmp -Funktionen wo möglich, weil sie langsam sind. Sie müssen für jeden Vergleich neu bewertet werden. Durch die Verwendung von key wird der Schlüssel nur einmal berechnet.

%Vor%

Sie sagen auch, dass Sie nach der Summe der Wertelemente sortieren möchten, aber Sie sortieren nach der Differenz. Die Summe würde wie folgt aussehen:

%Vor%

Wie in anderen Antworten erwähnt, geben Sie nicht den richtigen Wert zurück (muss -1,0 oder 1 sein), um wirklich eine cmp -Funktion definieren zu wollen.

%Vor%

Aber auch wenn Sie nur ein Lambda verwenden, um den Wert zu erhalten, können Sie das durch itemgetter ersetzen, was schneller sein sollte als eine python-seitige Funktion:

%Vor%

Wenn Sie versuchen, Sortieroperationen zu speichern, wäre es viel besser, die Schlüsselfunktionen zu speichern:

%Vor%     
jdi 21.11.2012, 20:01
quelle
4

Ihre Vergleichsfunktion sollte einen (negativen / Null / positiven) Wert zurückgeben, wenn das erste Argument (kleiner / gleich / größer) als der zweite Wert ist (im Gegensatz zu einem Komparator, der in C ++ auf std::sort(...) gesetzt ist).

d. statt

%Vor%

tue

%Vor%     
Andre Holzner 21.11.2012 20:01
quelle
2

Wenn Sie nach der Summe des Werttupels sortieren möchten (entsprechend Ihrem Kommentar), könnten Sie verwenden:

%Vor%

Wenn Sie nach dem Verhältnis (nach Ihrem Code) sortieren möchten:

%Vor%     
Julien Vivenot 21.11.2012 20:00
quelle

Tags und Links