print activities
activities = sorted(activities,key = lambda item:item[1])
print activities
这种情况下的活动是像(start_number,finish_number)
这样的元组列表,根据我的上述代码的输出应该是根据finish_number
的递增顺序排序的值列表。当我在shell中尝试上面的代码时,得到了以下输出。我不确定为什么第二个列表没有根据finish_number
的递增顺序排序。请帮助我理解这一点。
[('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')]
答案 0 :(得分:6)
您正在排序字符串而不是整数:在这种情况下,10
比4
“更小”。要对整数进行排序,请将其转换为:
activites = sorted(activities,key = lambda item:int(item[1]))
print activities
结果:
[('1', '4'), ('3', '5'), ('0', '6'), ('5', '7'), ('3', '9'), ('5', '9'), ('6', '10'), ('8', '11'), ('8', '12'), ('2', '14'), ('12', '16')]
答案 1 :(得分:6)
您的商品将被比较为字符串,而不是数字。因此,由于1
字符按字典顺序排在4
之前,因此10
出现在4
之前是有道理的。
您需要先将值转换为int:
activities = sorted(activities,key = lambda item:int(item[1]))
答案 2 :(得分:2)
您正在排序字符串,而不是数字。字符串按字符排序。
因此,例如'40'
大于'100'
,因为字符4
大于1
。
您可以通过简单地将项目转换为整数来动态修复此问题。
activities = sorted(activities,key = lambda item: int(item[1]))
答案 3 :(得分:1)
这是因为您不是将数字存储为数字,而是存储为字符串。字符串'10'
位于字符串'2'
之前。尝试:
activities = sorted(activities, key=lambda i: int(i[1]))
答案 4 :(得分:1)
寻找问题的更广泛的解决方案:在输入时立即将您的数据从str
转换为int
,并将其作为int
使用(否则您将会不断遇到这样的小问题,并将数据格式化为str
以便输出。
这个原则通常适用,例如:使用非ASCII字符串数据时,请执行UTF-8 - > unicode - > UTF-8;不要试图操纵未解码的文本。