2016-09-15 8 views
0

Ich versuche Werte in einer Liste nach den Buchstaben in ihrem Namen zu sortieren: Ich möchte beispielsweise ["8a", "8c", "8b", "8d"] zu ["8a", "8b "," 8c "," 8d "]. Hat das etwas mit einem Schlüssel zu tun?wie Sie Elemente in einer Liste alphabetisch nach den Buchstaben in ihren jeweiligen Namen sortieren.

+2

Dies ist sehr breit, und es ist sehr wahrscheinlich, dass dies nicht die reale Fall ist, sonst 'sortiert (lst) 'werde es tun. – Psidom

+0

Wird der Buchstabe immer das zweite Zeichen sein? – David

+0

1) Was sollte das Ergebnis für eine Liste wie diese sein: ['9a', '6b', '3d']? 2) Ist das Format der Einträge in der Liste immer eine Nummer gefolgt von einem Zeichen? – gowrath

Antwort

0

Sie können dies erreichen, indem Sie es nach einer Liste sortieren.

list = ["8a", "8c", "8b", "8d"] 
list.sort() 
print(list) 
0

, dass Ihr Problem lösen lösen würde:

_list = ["8a", "8c", "8b", "8d"] 
_list.sort() 
print _list 

Ausgang:

['8a', '8b', '8c', '8d'] 
3

Die Antwort ist einfach, wenn die Daten wie in Ihrer Frage aussehen. Wenn die Daten komplexer sind, müssen Sie der Methode sort einen Schlüssel geben, der nur Buchstaben aus dem Alphabet enthält.

data = ["34b", "2a5t", "2a5s", "abcd"] 
data.sort(key=lambda x: ''.join(c for c in x if c.isalpha())) 
print(data) 

Dies gibt Ihnen ['abcd', '2a5s', '2a5t', '34b'].

Wenn Sie sehen wollen, wie die konstruierte Schlüssel sieht aus wie Sie es wie folgt überprüfen:

for value in data: 
    print(value, ''.join(c for c in value if c.isalpha())) 

34b b 
2a5t at 
2a5s as 
abcd abcd 
0

Die .Sort() -Methode für Listen wurde erwähnt; eine Sortierfunktion ist, die die Liste als Argument übernimmt, und eine sortierte Liste zurückgibt, ohne die Liste an Ort und Stelle zu ändern:

>>> mylist = ["8a", "8c", "8b", "8d"] 
>>> sorted(list) 
['8a', '8b', '8c', '8d'] 
>>> mylist 
['8a', '8c', '8b', '8d'] 
+0

korrigiert, danke. Den Variablennamen "list" einfach behalten, weil OP das so heißt. –

+0

anscheinend stelle ich mir Dinge vor ... –

1

Vorausgesetzt, dass Ihr Format Zahl folgt immer per Brief, benötigen Sie eine spezielle Sortiermethode geben Taste zum Sortieren nach: In diesem Fall möchten Sie nach dem letzten Zeichen sortieren. Viele der anderen Antworten sortieren nur Ihre Liste alphabetisch mit der Nummer gefolgt von Buchstaben, während ich das Gefühl habe, dass Sie nur nach dem Buchstaben sortieren möchten. Dies ist eine mögliche Art und Weise:

s = ['9d', '12a', '1e'] 
sorted_s = sorted(s, key=lambda x:x[-1]) # sorts by the last character of every entry 

Dies zurück:

['12a', '9d', '1e'] 
+0

@ PM2Ring Ah whoops mistype. Danke für das Aufzeigen (y) – gowrath

0

versuchen

Das Beispiel, das Sie in ihrem Namen mit den Buchstaben Werte in einer Liste zu sortieren erwähnt ist sehr einfach. Basierend auf Ihrer Anforderung, unten ist der Code re.findall() und sorted() mit sortieren basierend auf Buchstaben in beliebiger Reihenfolge innerhalb string:

>>> import re 
>>> s = ['a9d', '1a2ba', '1e2s', '1b3tr'] 
>>> sorted(s, key=lambda x: re.findall("[a-zA-Z]+", x)) 
['1a2ba', 'a9d', '1b3tr', '1e2s'] # Sorted based on: aba, ad, btr, es 
Verwandte Themen