2011-10-17 53 views
0
print activities 
activities = sorted(activities,key = lambda item:item[1]) 
print activities 

在這種情況下的活動是像(start_number,finish_number)這樣的元組列表,根據我的上述代碼的輸出應該是按照finish_number的遞增順序排序的值的列表。當我在shell中嘗試上面的代碼時,我得到了以下輸出。我不確定爲什麼第二個列表不是按照finish_number的遞增順序排序。請幫助我理解這一點。爲什麼我沒有按預期順序獲得排序函數的結果?

[('1', '4'), ('3', '5'), ('0', '6'), ('5', '7'), ('3', '9'), ('5', '9'), ('6', '10'), ('8', '11'), ('8', '12'), ('2', '14'), ('12', '16')] 
[('6', '10'), ('8', '11'), ('8', '12'), ('2', '14'), ('12', '16'), ('1', '4'), ('3', '5'), ('0', '6'), ('5', '7'), ('3', '9'), ('5', '9')] 

回答

6

要排序的字符串,而不是整數:在這種情況下,104「小」。要排序的整數,將其轉換爲這樣的:

activites = sorted(activities,key = lambda item:int(item[1])) 
print activities 

結果:

[('1', '4'), ('3', '5'), ('0', '6'), ('5', '7'), ('3', '9'), ('5', '9'), ('6', '10'), ('8', '11'), ('8', '12'), ('2', '14'), ('12', '16')] 
+0

ohh偉大的我從來沒有注意到它是字符串,謝謝你的回覆 –

6

你的項目被作爲比較字符串,而不是數字。因此,由於1字符按照字典順序排列在4之前,所以104之前是有意義的。

您需要的值轉換爲int第一:

activities = sorted(activities,key = lambda item:int(item[1])) 
1

這是因爲你沒有存儲爲數字的數量,但作爲一個字符串。字符串'10'出現在字符串'2'之前。請嘗試:

activities = sorted(activities, key=lambda i: int(i[1])) 
2

您正在排序字符串,而不是數字。字符串按字符排序。

因此,例如'40'大於'100',因爲字符4大於1

您可以通過簡單地將項目轉換爲整數來修復此問題。

activities = sorted(activities,key = lambda item: int(item[1])) 
1

查找更廣泛的解決問題的方法:從str它轉換您的數據int立即投入工作爲int(否則你會被不斷地碰到類似這樣的小問題)並將數據格式化爲str以進行輸出。

該原則通常適用於例如當使用非ASCII字符串數據時,請執行UTF-8 - > unicode - > UTF-8;不要試圖操縱未解碼的文本。

相關問題