2008-08-30 26 views

Antwort

384

Grund Antwort:

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

Dies ändert Ihre ursprüngliche Liste (das heißt Arten in-place). Um eine sortierte Kopie der Liste zu bekommen, ohne das Original zu verändern, verwenden Sie die sorted() Funktion:

for x in sorted(mylist): 
    print x 

jedoch über die Beispiele ein wenig naiv sind, weil sie nicht nehmen Gebietsschema berücksichtigt, und führen Sie einen Fall -sensitive Sortierung. Sie können den optionalen Parameter key verwenden, um eine benutzerdefinierte Sortierreihenfolge anzugeben (die Alternative cmp ist eine veraltete Lösung, da sie mehrfach ausgewertet werden muss - key wird nur einmal pro Element berechnet).

So, nach den aktuellen Locale zu sortieren, wobei sprachspezifische Regeln zu berücksichtigen (cmp_to_key ist eine Hilfsfunktion von functools):

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

Und schließlich, wenn Sie möchten, können Sie ein custom locale angeben 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: finden Sie Beispiele für Groß- und Kleinschreibung Sortierung zu sehen, die die lower() Methode verwenden - das falsch sind, weil sie nur für die ASCII-Teilmenge von Zeichen arbeiten. Diese beiden sind falsch für alle nicht-englischen Daten:

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

'mylist.sort (key = str.lower)' ist schneller. – jfs

+0

Guter Punkt. Ich werde mein aktuelles Beispiel so lassen, wie es ist, da es für einen Anfänger wahrscheinlich leichter ist zu sehen, was passiert, aber ich werde das in Zukunft berücksichtigen. –

+1

Wenn jemand neugierig ist, kann die Leistung von list.sort() gefunden werden [http://stackoverflow.com/questions/1517347/about-pythons-built-in-sort-method] –

32
list.sort() 

Es ist wirklich so einfach :)

+2

Funktioniert nicht mit Python 3.6 mit Zahlen. Verwenden Sie stattdessen 'sorted (list)'. – Dmitry

10

Aber wie funktioniert dieser Griff sprachspezifische Sortierregeln? Wird das Gebietsschema berücksichtigt?

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 versuchen, das pyuca Modul zu verwenden, aber ich weiß nicht, wie vollständig es ist.

41

Es ist auch erwähnenswert, die sorted() Funktion:

for x in sorted(list): 
    print x 

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

18

Der richtige Weg, Strings 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()) wird für ASCII-only Kontexten funktionieren.

1

Angenommen s = "ZWzaAd"

Um oben Zeichenfolge zu sortieren die einfache Lösung unten sein wird.

print ''.join(sorted(s)) 
4

Bitte benutzen Sie sortiert() Funktion in Python3

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