Ich möchte sozusagen eine Liste von strings, basierend auf der string-Länge. Ich habe versucht, zu verwenden, zu Sortieren, wie folgt, aber es scheint nicht, um mir ein korrektes Ergebnis.
xs = ['dddd','a','bb','ccc']
print xs
xs.sort(lambda x,y: len(x) < len(y))
print xs
['dddd', 'a', 'bb', 'ccc']
['dddd', 'a', 'bb', 'ccc']
Was falsch sein könnte?
InformationsquelleAutor der Frage prosseek | 2010-04-06
Wenn Sie an einem
lambda
zusort
Sie müssen eine Ganzzahl zurück, nicht boolean. Also der code sollte stattdessen wie folgt zu Lesen:Beachten Sie, dass cmp ist eine eingebaute Funktion, so dass
cmp(x, y)
gibt -1 zurück, wennx
ist weniger alsy
0, fallsx
gleichy
und 1, wennx
größer ist alsy
.Natürlich, Sie können stattdessen die
key
parameter:Dieser erzählt die
sort
Methode, um basierend auf was auch immer der key-Funktion gibt.EDIT: Dank balpha und Ruslan unten für den Hinweis, dass man nur pass
len
direkt als die entscheidenden parameter, um die Funktion, wodurch die Notwendigkeit für einelambda
:Und wie Ruslan Punkte out unten, Sie können auch die eingebaute sortiert Funktion eher als die
list.sort
Methode legt eine neue Liste eher als das Sortieren der vorhandenen in-place:InformationsquelleAutor der Antwort Eli Courtwright
Das gleiche wie in Eli ' s Antwort - nur eine kürzere form, da können Sie überspringen eine
lambda
Teil hier.Erstellen neue Liste:
In-place-Sortierung:
InformationsquelleAutor der Antwort Ruslan Spivak
Ich Würde gerne hinzufügen, wie die pythonic Schlüssel funktioniert, beim Sortieren :
Dekorieren-Sort-Undecorate Design Pattern :
Python-Unterstützung für eine wichtige Funktion bei der Sortierung implementiert ist, verwenden, was ist bekannt als die
dekorieren-sort-undecorate design-Muster.
Es geht in 3 Schritten:
Jedes element der Liste wird vorübergehend ersetzt durch ein "dekoriert" - version, enthält das Ergebnis die Funktion der Taste auf das element angewendet.
Ist die Liste sortiert, basierend auf der natürlichen Ordnung der Schlüssel.
Die verzierten Elemente ersetzt werden, die von den ursprünglichen Elementen.
Key-parameter zum angeben einer Funktion, die aufgerufen werden auf jedes element in der Liste vor einem Vergleich. docs
InformationsquelleAutor der Antwort James Sapam
Der einfachste Weg, dies zu tun ist:
InformationsquelleAutor der Antwort Chirag Patel
Schreiben Sie eine Funktion lensort zu Sortieren-eine Liste von strings, basierend auf der Länge.
InformationsquelleAutor der Antwort Febin Stephen
Dies funktioniert für mich!
InformationsquelleAutor der Antwort Saurabh Ariyan