排序小數我有一個列表在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"]
任何想法,我怎麼能做到這一點?
排序小數我有一個列表在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"]
任何想法,我怎麼能做到這一點?
如果你想考慮字符串的長度,你必須告訴它的關鍵功能。我們必須構建一個密鑰,其中首先考慮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']
謝謝,這工作! – Ash
這不是一個解決方案,但它是因爲我可以做的就是它開始儘可能多:
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)
它現在遇到的唯一問題是作爲列表迭代,它一直會在相同的值一次又一次地推動他們前進。也許一個函數可以防止這種情況發生。
*我用list1.sort(key = int)給出了輸出*你真的嗎?你使用的是什麼Python實現和版本?我得到的唯一「輸出」是一個「ValueError」。 – Shashank
首先:您需要'key = float'。第二:Python使用穩定的排序。所以'1.10'等於'1.1'會因爲原來的順序而始終以這個順序出現。一個簡單的'list1.sort()'會產生這個單行列表的行爲,因爲它會比較字符串,而不是數字 – JBernardo
你知道1.10 == 1.1和2.20 == 2.2,那些數字對恰好*同樣的,沒有理由爲什麼你應該期望他們按照這種或那種方式排序...... –