Frage

Was ist der beste Weg, eine alphabetisch sortierte Liste in Python zu erstellen?

War es hilfreich?

Lösung

Grundlegende Antwort:

mylist = ["b", "C", "A"]
mylist.sort()

Dadurch wird Ihre ursprüngliche Liste geändert (d. h.Sortiert vor Ort).Um eine sortierte Kopie der Liste zu erhalten, ohne das Original zu ändern, verwenden Sie die sorted() Funktion:

for x in sorted(mylist):
    print x

Allerdings sind die obigen Beispiele etwas naiv, da sie das Gebietsschema nicht berücksichtigen und eine Sortierung unter Berücksichtigung der Groß- und Kleinschreibung durchführen.Sie können den optionalen Parameter nutzen key um eine benutzerdefinierte Sortierreihenfolge anzugeben (die Alternative: using cmp, ist eine veraltete Lösung, da sie mehrfach evaluiert werden muss - key wird nur einmal pro Element berechnet).

Um also nach dem aktuellen Gebietsschema zu sortieren und dabei sprachspezifische Regeln zu berücksichtigen (cmp_to_key ist eine Hilfsfunktion von functools):

sorted(mylist, key=cmp_to_key(locale.strcoll))

Und schließlich können Sie bei Bedarf a angeben Benutzerdefiniertes Gebietsschema zum Sortieren:

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'),
  key=cmp_to_key(locale.strcoll)) == [u'aa', u'Ab', u'ad']

Letzte Anmerkung:Sie werden Beispiele für eine Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung sehen, die das verwendet lower() -Methode - diese sind falsch, da sie nur für die ASCII-Teilmenge von Zeichen funktionieren.Diese beiden sind für alle nicht-englischen Daten falsch:

# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)

Andere Tipps

Erwähnenswert ist auch die sorted() Funktion:

for x in sorted(list):
    print x

Dies gibt eine neue, sortierte Version einer Liste zurück, ohne die ursprüngliche Liste zu ändern.

list.sort()

Es ist wirklich so einfach :)

Die richtige Art, Zeichenfolgen zu sortieren, ist:

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'), cmp=locale.strcoll) == [u'aa', u'Ab', u'ad']

# Without using locale.strcoll you get:
assert sorted((u'Ab', u'ad', u'aa')) == [u'Ab', u'aa', u'ad']

Das vorherige Beispiel von mylist.sort(key=lambda x: x.lower()) funktioniert gut für reine ASCII-Kontexte.

Aber wie geht das mit sprachspezifischen Sortierregeln um?Berücksichtigt es das Gebietsschema?

NEIN, list.sort() ist eine generische Sortierfunktion.Wenn Sie nach den Unicode-Regeln sortieren möchten, müssen Sie eine benutzerdefinierte Sortierschlüsselfunktion definieren.Sie können es mit dem versuchen Pyuca Modul, aber ich weiß nicht, wie vollständig es ist.

Bitte verwenden Sie die Funktion sorted() in Python3

items = ["love", "like", "play", "cool", "my"]
sorted(items2)

Vermuten s = "ZWzaAd"

Um oberhalb der Zeichenfolge zu sortieren, wäre die einfache Lösung unterhalb einer.

print ''.join(sorted(s))

Oder vielleicht:

names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top