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?
key
Parameters der Übergabe einer cmp
Funktion vorgezogen . (
foo
, sonst explodiert es. Es ist besser, eine benutzerdefinierte __lt__()
Methode für Ihre Klasse zu definieren , sorted()
und list.sort()
sie funktioniert sofort. (Übrigens müssen Objekte nicht mehr definiert werden __cmp__()
, nur __lt__()
. Siehe dies
sorted()
undsort()
bieten benutzerdefinierte Sortierung auf die gleiche Weise, modulo den Unterschied in der Aufrufkonvention.