Python Sort方法无法正确排序分数

时间:2016-05-09 06:50:54

标签: python python-2.7 sorting

我有一个元组列表,我想根据元组中两个元素的一小部分进行排序。我遇到的问题是,Python的list排序方法似乎不适用于分数。

Before: A: [(4, 1, 0), (4, 1, 1), (1, 1, 2), (4, 7, 3), (2, 4, 4), (1, 4, 5), (3, 1, 6), (2, 1, 7), (3, 9, 8), (1, 6, 9)]
After:  A: [(1, 6, 9), (1, 4, 5), (3, 9, 8), (2, 4, 4), (1, 1, 2), (4, 7, 3), (4, 1, 0), (4, 1, 1), (3, 1, 6), (2, 1, 7)]

进行排序的代码:

print("A: " + str(A))
A.sort(key=lambda tup: long(tup[1]/tup[0]), reverse=True)
print("A: " + str(A))

我认为根据上面的代码,元素(1,1,2)和元素(4,7,3)应该被切换,因为7/4> 1/1。我也非常确定最后的所有分数都是错误的,这让我觉得它只是做整数除法和舍入。我认为将其投入很长时间可以解决这个问题,但事实并非如此。

1 个答案:

答案 0 :(得分:2)

在Python 2中,/对整数进行整数除法(截断结果)。你试图做的是然后将结果转换为很长时间,但是已经完成了除法并且信息丢失了。尝试仅转换第一个参数,然后将其转换为浮动:

A.sort(key=lambda tup: float(tup[1])/tup[0], reverse=True)

/现在在Python 3中被更改为始终执行浮动除法。