2011-10-17 48 views
0
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')] 

回答

6

要排序的字符串,而不是整数:在这种情况下,104“小”。要排序的整数,将其转换为这样的:

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')] 
+0

ohh伟大的我从来没有注意到它是字符串,谢谢你的回复 –

6

你的项目被作为比较字符串,而不是数字。因此,由于1字符按照字典顺序排列在4之前,所以104之前是有意义的。

您需要的值转换为int第一:

activities = sorted(activities,key = lambda item:int(item[1])) 
1

这是因为你没有存储为数字的数量,但作为一个字符串。字符串'10'出现在字符串'2'之前。请尝试:

activities = sorted(activities, key=lambda i: int(i[1])) 
2

您正在排序字符串,而不是数字。字符串按字符排序。

因此,例如'40'大于'100',因为字符4大于1

您可以通过简单地将项目转换为整数来修复此问题。

activities = sorted(activities,key = lambda item: int(item[1])) 
1

查找更广泛的解决问题的方法:从str它转换您的数据int立即投入工作为int(否则你会被不断地碰到类似这样的小问题)并将数据格式化为str以进行输出。

该原则通常适用于例如当使用非ASCII字符串数据时,请执行UTF-8 - > unicode - > UTF-8;不要试图操纵未解码的文本。