Python 为什么我不能按预期的顺序得到排序函数的结果?
本例中的活动是一个元组列表,如Python 为什么我不能按预期的顺序得到排序函数的结果?,python,sorting,Python,Sorting,本例中的活动是一个元组列表,如(start\u number,finish\u number)根据我的说法,上述代码的输出应该是按照finish\u number的递增顺序排序的值列表。当我在shell中尝试上面的代码时,我得到了以下输出。我不知道为什么第二个列表没有按照finish\u编号的递增顺序排序。请帮助我理解这一点 print activities activities = sorted(activities,key = lambda item:item[1]) print acti
(start\u number,finish\u number)
根据我的说法,上述代码的输出应该是按照finish\u number
的递增顺序排序的值列表。当我在shell中尝试上面的代码时,我得到了以下输出。我不知道为什么第二个列表没有按照finish\u编号的递增顺序排序。请帮助我理解这一点
print activities
activities = sorted(activities,key = lambda item:item[1])
print activities
您正在对字符串而不是整数进行排序:在这种情况下,10
比4
小。要按整数排序,请将其转换为:
[('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')]
结果:
activites = sorted(activities,key = lambda item:int(item[1]))
print activities
您的项目将作为字符串而不是数字进行比较。因此,由于1
字符在词典中位于4
之前,因此10
位于4
之前是有意义的
您需要先将值强制转换为int:
[('1', '4'), ('3', '5'), ('0', '6'), ('5', '7'), ('3', '9'), ('5', '9'), ('6', '10'), ('8', '11'), ('8', '12'), ('2', '14'), ('12', '16')]
这是因为您没有将数字存储为数字,而是存储为字符串。字符串'10'
位于字符串'2'
之前。尝试:
activities = sorted(activities,key = lambda item:int(item[1]))
您正在排序字符串,而不是数字。字符串按字符进行排序
因此,例如'40'
大于'100'
,因为字符4
大于1
您可以通过简单地将项目转换为整数来动态修复此问题
activities = sorted(activities, key=lambda i: int(i[1]))
为您的问题寻找更广泛的解决方案:在输入时立即将数据从str
转换为int
,以int
的形式使用它(否则您将不断遇到类似的小问题),并将数据格式化为str
,以便输出
此原则通常适用,例如,在处理非ASCII字符串数据时,执行UTF-8->unicode->UTF-8;不要试图操纵未编码的文本。哦,太好了,我从来没有注意到它是字符串,谢谢你的回复
activities = sorted(activities,key = lambda item: int(item[1]))