2014-11-24 58 views
0

我有從閱讀txt文件中創建的2D列表。我寫了這個代碼進行排序最高值的列表 - 位置5在2D列表上排序

sort = list(sorted(sort,key=lambda x: x[5],reverse=True)) 
for i in range(0, len(sort)): 
      print("Name:",sort[i][0],"\tscore1:",sort[i][1],"\tscore2:",sort[i][2],"\tscore3:",sort[i][3], "\tHighest:",sort[i][5]) 

代碼似乎從,除了工作,由於某種原因,它把的10(只有2位數字在列表的底部。而不是在頂部我有使用最大函數達到最高數,然後簡單地將其附加到每個列表的末尾

名:乙score1:6 score2:1 score3:3最高:6

名稱:Z得分1:4得分2:4得分3:5最高:5

名稱:尼爾score1:4 score2:1 score3:3最高:4

名稱:fred的score1:10 score2:0 score3:0最高:10

任何幫助理解。

+0

你能顯示你的輸入列表嗎? – 2014-11-24 23:15:48

回答

0

的問題是幾乎可以肯定的是,你實際上沒有數字,但字符串。*

比較字符串字典順序,也就是說,按字母順序排列的,每個字符,你會在排序的話同樣的方式一本字典。數字沒有什麼特別的;他們就像任何其他角色一樣對待。因此,"10"小於"2",因爲第一個字符串的第一個字符"1"小於第二個字符的第一個字符串"2"

你可能想要做的是首先存儲整數(或浮點數或其他數字類型)。

但是,如果要存儲字符串並按其整數值排序,則可以將int作爲排序鍵。或者,在你的情況下,lambda x: int(x[5])而不是lambda x: x[5]


*爲了在以後的調試:當你只是print的值,它可以是含糊不清它是什麼。數字2和字符串"2"都只是打印爲2。它可以幫助暫時print(repr(x))和/或print(type(x))找到類似的問題。 (你會分別得到2'2'int分別與str對比。)即使repr仍然可以偶爾不明確 - 但這大多隻發生在通常無關緊要的情況下。大多。

+1

輝煌。感謝您的解釋。在嘗試你的方法並實現這個問題後,我決定在進行排序之前將max轉換爲int。 – learningpython 2014-11-24 23:37:25

0

這是因爲x[5]似乎是一個字符串。您應該嘗試通過調用int(x[5])將其轉換爲int

+0

非常感謝。爲了糾正這個問題,我在完成排序之前將max轉換爲int。 – learningpython 2014-11-24 23:41:00