2017-07-31 54 views
0

這裏的位置是一個列表列表理解指定元素

l = ['Bear', 'Apple', 'Bread', 'Apes', 'Bones', 'Axes'] 

我想通過排序列表理解這個名單。以'A'開頭,'B'開頭。我想要的代碼是在下面的方式 -

l = [putfirst(i) if i.startswith('A') else putlast(i) else for i in l] 

這樣做之後,我希望它像

l = ['Apple','Apes','Axes','Bear','Bread','Bones'] 
+1

你是什麼意思_「保留列表的順序」_?保留原始列表'l'的順序。 'sorted()'返回一個_ **新的** _列表,所以'l'不受影響。然而,list的'sort'方法,_does_改變列表。 –

+1

你**做**想排序。排序正在根據某些規則改變訂單。您正在對第一個字母*進行排序*。 –

+0

你的意思是你不想字母列表的字母順序。 @Martin Pieters的答案是用Python的排序函數來完成你想要的,你可以指定你想要的排序類型。 – pylang

回答

5

Lis t理解按照您的輸入迭代產生的順序處理事物。他們不能用於重新排序條目

使用sorted()list.sort()代替:

sorted(l, key=lambda word: word[0]) 
l.sort(key=lambda word: word[0]) 

sorted()產生一個新的列表,list.sort()各種就地現有列表。

這裏可調用的key告訴sorted()只在決定排序時使用第一個字母。具有相同起始字母的字詞以相同的相對順序排列:

>>> l = ['Bear', 'Apple', 'Bread', 'Apes', 'Bones', 'Axes'] 
>>> sorted(l, key=lambda word: word[0]) 
['Apple', 'Apes', 'Axes', 'Bear', 'Bread', 'Bones'] 
+0

謝謝!我無法正確地說出問題。但是從你的第一行中得到了答案。 –

4

可以使用sorted()功能:

l = ['Bear','Apple','Bread','Apes','Bones','Axes'] 

new_l = sorted(l, key=lambda x: x[0]) 

輸出:

['Apple', 'Apes', 'Axes', 'Bear', 'Bread', 'Bones'] 
相關問題