165 Stimmen

Sortierung der Python-Liste nach der Länge der Zeichenkette

Ich möchte eine Liste von Zeichenfolgen auf der Grundlage der Zeichenfolgenlänge sortieren. Ich habe versucht, sort as follows zu verwenden, aber es scheint mir nicht das richtige Ergebnis zu liefern.

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 könnte falsch sein?

267voto

Eli Courtwright Punkte 174547

Wenn Sie eine lambda a sort müssen Sie eine ganze Zahl zurückgeben, keinen booleschen Wert. Ihr Code sollte also stattdessen wie folgt lauten:

xs.sort(lambda x,y: cmp(len(x), len(y)))

Beachten Sie, dass cmp ist eine eingebaute Funktion, die so beschaffen ist, dass cmp(x, y) gibt -1 zurück, wenn x ist kleiner als y 0, wenn x ist gleich y und 1, wenn x größer ist als y .

Natürlich können Sie stattdessen auch die key Parameter:

xs.sort(key=lambda s: len(s))

Dies sagt dem sort Methode, um auf der Grundlage der von der Schlüsselfunktion zurückgegebenen Daten zu sortieren.

EDIT: Dank an balpha und Ruslan unten für den Hinweis, dass man einfach passieren kann len direkt als Schlüsselparameter in die Funktion ein, so dass die Notwendigkeit einer lambda :

xs.sort(key=len)

Und wie Ruslan weiter unten ausführt, können Sie auch die integrierte sortiert Funktion statt der Funktion list.sort Methode, die eine neue Liste erstellt, anstatt die vorhandene Liste direkt zu sortieren:

print(sorted(xs, key=len))

119voto

Ruslan Spivak Punkte 1560

Dasselbe wie in Elis Antwort - nur in kürzerer Form, denn man kann ein lambda Teil hier.

Neue Liste erstellen:

>>> xs = ['dddd','a','bb','ccc']
>>> sorted(xs, key=len)
['a', 'bb', 'ccc', 'dddd']

Sortierung an Ort und Stelle:

>>> xs.sort(key=len)
>>> xs
['a', 'bb', 'ccc', 'dddd']

9voto

Chirag Patel Punkte 51

Am einfachsten ist es, dies zu tun:

list.sort(key = lambda x:len(x))

5voto

James Punkte 14623

Ich würde gerne hinzufügen, wie die pythonische Schlüsselfunktion beim Sortieren funktioniert:

Dekorieren-Sortieren-Entdekorieren Gestaltungsmuster :

Pythons Unterstützung für eine Schlüsselfunktion beim Sortieren wird durch die so genannte Dekorieren-Sortieren-Undekorieren-Entwurfsmuster.

Sie läuft in 3 Schritten ab:

  1. Jedes Element der Liste wird vorübergehend durch eine "dekorierte" Version ersetzt, die das Ergebnis der auf das Element angewandten Schlüsselfunktion enthält.

  2. Die Liste wird nach der natürlichen Reihenfolge der Schlüssel sortiert.

  3. Die verzierten Elemente werden durch die ursprünglichen Elemente ersetzt.

Schlüsselparameter zur Angabe einer Funktion, die für jedes Listenelement vor der Durchführung von Vergleichen aufgerufen wird. docs

2voto

Febin Stephen Punkte 63

Schreiben Sie eine Funktion lensort, um eine Liste von Zeichenketten nach ihrer Länge zu sortieren.

def lensort(a):
    n = len(a)
    for i in range(n):
        for j in range(i+1,n):
            if len(a[i]) > len(a[j]):
                temp = a[i]
                a[i] = a[j]
                a[j] = temp
    return a
print lensort(["hello","bye","good"])

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X