2015-05-05 125 views
-4

排序小數我有一個列表在python

list1 = ["1.10","1.1","1.23","2.20","2.2"] 

,我用

list1.sort(key=float) 

這給了輸出

list1 = ["1.10","1.1","1.23","2.20","2.2"] 

但是我正在尋找這樣的:

list1 = ["1.1","1.10","1.23","2.2","2.20"] 

任何想法,我怎麼能做到這一點?

+1

*我用list1.sort(key = int)給出了輸出*你真的嗎?你使用的是什麼Python實現和版本?我得到的唯一「輸出」是一個「ValueError」。 – Shashank

+1

首先:您需要'key = float'。第二:Python使用穩定的排序。所以'1.10'等於'1.1'會因爲原來的順序而始終以這個順序出現。一個簡單的'list1.sort()'會產生這個單行列表的行爲,因爲它會比較字符串,而不是數字 – JBernardo

+0

你知道1.10 == 1.1和2.20 == 2.2,那些數字對恰好*同樣的,沒有理由爲什麼你應該期望他們按照這種或那種方式排序...... –

回答

1

如果你想考慮字符串的長度,你必須告訴它的關鍵功能。我們必須構建一個密鑰,其中首先考慮float值,然後再考慮字符串的長度。

最簡單的方法是使用這兩個值創建一個元組。

>>> list1 = ["1.10","1.1","1.23","2.20","2.2"] 
>>> list1.sort(key=lambda x: (float(x), len(x))) 
>>> list1 
['1.1', '1.10', '1.23', '2.2', '2.20'] 
+0

謝謝,這工作! – Ash

0

這不是一個解決方案,但它是因爲我可以做的就是它開始儘可能多:

string1 = ["1.10","1.1","1.23","2.2","2.20"] 
for x in string1: 
    if x.find('0') > 0: 
     place = string1.index(x) 
     string1.remove(x) 
     string1.insert(place+1, x) 
print (string1) 

它現在遇到的唯一問題是作爲列表迭代,它一直會在相同的值一次又一次地推動他們前進。也許一個函數可以防止這種情況發生。