sort() in Python mithilfe von cmp
Ich versuche zu Sortieren, eine Liste, bewegen sich alle mit 0 an das Ende der Liste.
Beispiel: [0,1,0,2,3,0,4]->[1,2,3,4,0,0,0]
und ich jemanden sehen, der code in 1 Zeile
list.sort(cmp=lambda a,b:-1 if b==0 else 0)
Aber ich verstehe nicht, was in den Klammern bedeuten.
Könnte mir jemand sagen? Danke.
Wie viel verstehen Sie, wie viel verstehen Sie nicht? Wissen Sie, was die
versuchen Sie googeln Ihre tags:
Auch wenn Sie wissen, Python, verpassen Sie vielleicht die Tatsache, dass diese Zeile hängt von einem detail über die Reihenfolge, in der die Elemente, die verglichen werden, von daher glaube ich, dass die Frage zum Thema.
cmp
parameter hat? Wissen Sie, was eine lambda
ist? Wissen Sie, was das inline - if..else
ist?versuchen Sie googeln Ihre tags:
python
, lambda
, sort
und Sie 'll finden wie man Sie benutzt und was Sie tun.Auch wenn Sie wissen, Python, verpassen Sie vielleicht die Tatsache, dass diese Zeile hängt von einem detail über die Reihenfolge, in der die Elemente, die verglichen werden, von daher glaube ich, dass die Frage zum Thema.
InformationsquelleAutor yoppy | 2015-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorwort:
Sortieren einer Liste nach dem normalen Vergleich:
Liefern benutzerdefinierte Komparator:
Einen lambda-Funktion:
Einer if-else-Ausdruck:
Die Linie
list.sort(cmp=lambda a,b:-1 if b==0 else 0)
sich:Nun, der Zustand, in dem Komparator ist, ob
b==0
, wenn so anzugeben, dassb
hat einen größeren Wert alsa
(das Vorzeichen des Ergebnisses ist negativ), sonst zeigen Sie, dass die Werte vergleichen, die die gleichen (das Zeichen ist null).Während Python ' s
list.sort()
ist stabil, dieser code ist nicht zurechnungsfähig, weil der Komparator muss testa
auch nicht nurb
. Die ordnungsgemäße Umsetzung verwenden würde, diekey
argument:Festen
list.sort(cmp=...)
Umsetzung:Wenn Sie verwenden möchten
list.sort(cmp=...)
(Sie nicht) oder wenn Sie einfach nur neugierig sind, ist dies eine vernünftige Umsetzung:Aber beachten Sie:
Eine alternative:
Sortieren einer Liste in
O(? log ?)
. Ich weiß nicht, ob für dieses einfache problem, das der code schneller läuft, aber ich würde nicht so denken. EinO(?)
Lösung ist die Filterung:Den Unterschied werden wohl nur die Materie für sehr lange Listen, aber.
InformationsquelleAutor kay
Erraten, was hier passiert? Ich bin auf die Ausnutzung der Tatsache, dass, als eine Vorliebe, die python abholen, die ganze zahlen zuerst, dann Streicher. ALSO ich habe Umgerechnet 0 in '0'.
Hier ist der Beweis.
InformationsquelleAutor Arindam Roychowdhury