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]))