2016-09-15 79 views
0

我想按名稱中的字母對列表中的值進行排序:例如,我希望[「8a」,「8c」,「8b」,「8d」]變成[「8a」,「8b」 「,」8c「,」8d「]。這與鑰匙有關嗎?如何按照各自名稱中的字母按字母順序對列表中的項目進行排序。

+2

這是非常廣泛的,而且它很可能這是不是你的真實情況,否則'排序( lst)'會做到這一點。 – Psidom

+0

這封信會永遠是第二個字嗎? – David

+0

1)結果如下:['9a','6b','3d']? 2)列表中條目的格式是否始終是一個數字後跟一個字符? – gowrath

回答

0

您可以通過列表排序來完成此操作。

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

這將解決解決您的問題:

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

輸出:

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

答案很簡單,如果數據看起來像你的問題。如果數據比較複雜,則必須給方法sort一個只包含字母表中字符的鍵。

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

這會給你['abcd', '2a5s', '2a5t', '34b']

如果你想看到的構建關鍵的樣子,你可以這樣檢查:

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

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

對列表的的.sort()方法被提及;有一個排序函數,它的列表作爲參數,並返回一個排序列表不到位修改列表:

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

中的任何'字母順序都已更正,謝謝。保留變量名稱「list」只是因爲這就是OP所稱的。 –

+0

顯然我想象的東西... –

1

假設您的格式總是跟着用字母和數字,你需要給的排序方法的具體按鍵排序:在這種情況下,您想按最後一個字符排序。許多其他答案只是按字母順序排列你的列表,使用數字後跟字母,而我感覺你只想按字母排序。這是一種可能的方式:

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

這將返回:

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

@ PM2Ring啊哎呀錯了。感謝您指出(y) – gowrath

0

試圖在他們的名字以字母列表中的值進行排序

你提到的例子是很簡單。根據您的需要,下面是一個使用re.findall()sorted()基於字符串中以任何順序字母排序的代碼:

>>> 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 
相關問題