在2D列表上排序

时间:2014-11-24 23:14:21

标签: python list sorting lambda

我有一个2D列表,我是通过读取txt文件创建的。我已编写此代码以按最高值对位置进行排序 - 位置5.

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位数字而不是顶部。我使用max函数获得最大数字,然后简单地附加它到每个列表的末尾。

姓名:B得分1:6得分2:1得分3:3最高:6

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

姓名:Neil得分1:4得分2:1得分3:3最高:4

姓名:fred得分1:10得分2:0得分3:0最高:10

任何帮助表示感谢。

2 个答案:

答案 0 :(得分: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'intstr。{即使repr仍可偶尔模糊不清 - 但这通常只发生在通常无关紧要的情况下。居多。

答案 1 :(得分:0)

这是因为x[5]似乎是一个字符串。您应该尝试通过调用int将其转换为int(x[5])