2014-11-24 48 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