我有一个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
任何帮助表示感谢。
答案 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'
和int
与str
。{即使repr
仍可偶尔模糊不清 - 但这通常只发生在通常无关紧要的情况下。居多。子>
答案 1 :(得分:0)
这是因为x[5]
似乎是一个字符串。您应该尝试通过调用int
将其转换为int(x[5])
。