Ich habe einen alten Code von mir überarbeitet und bin auf Folgendes gestoßen:
alist.sort(cmp_items)
def cmp_items(a, b):
if a.foo > b.foo:
return 1
elif a.foo == b.foo:
return 0
else:
return -1
Der Code funktioniert (und ich habe ihn vor 3 Jahren geschrieben!), Aber ich kann dieses Dokument nirgendwo in den Python-Dokumenten dokumentieren und jeder verwendet es sorted()
, um eine benutzerdefinierte Sortierung zu implementieren. Kann jemand erklären, warum das funktioniert?
sorted()
undsort()
bieten benutzerdefinierte Sortierung auf die gleiche Weise, modulo den Unterschied in der Aufrufkonvention.key
Parameters der Übergabe einercmp
Funktion vorgezogen . (foo
, sonst explodiert es. Es ist besser, eine benutzerdefinierte__lt__()
Methode für Ihre Klasse zu definieren ,sorted()
undlist.sort()
sie funktioniert sofort. (Übrigens müssen Objekte nicht mehr definiert werden__cmp__()
, nur__lt__()
. Siehe diesAntworten:
Es ist hier dokumentiert .
quelle
cmp
bekomme ich , wenn ich versuche zu benutzenTypeError: 'cmp' is an invalid keyword argument for this function
. Was geht hier vor sich?sort
eine Vergleichsfunktion in Python 3 nicht als Argument verwendet wird, und nicht als etwas, das ich eigentlich gerne tun würde.Als Randnotiz ist hier eine bessere Alternative, um dieselbe Sortierung zu implementieren:
Oder alternativ:
Schauen Sie sich die Sortieranleitung an , sie ist sehr nützlich.
quelle
Genau wie in diesem Beispiel. Sie möchten diese Liste sortieren.
Ausgabe:
Sie sollten die Tupel nach dem zweiten und dann nach dem ersten Element sortieren:
Schließlich:
gerade
sort(letter_cmp)
quelle
Dies funktioniert in Python 3 nicht.
Sie können jedoch functools cmp_to_key verwenden, damit Vergleichsfunktionen alten Stils funktionieren.
quelle
In Python3 können Sie schreiben:
quelle
Noch besser:
Entnommen aus: https://docs.python.org/3/howto/sorting.html
quelle