您的位置:首页 > 编程语言 > Python开发

Python 浮点数在列表中排序的问题

2015-01-14 00:00 246 查看
摘要: python2.7 float list sort

这两天写python代码遇到了很多问题,今天调试了一天的一个问题,发现是用list.sort进行浮点数排序时的一个问题导致的。

l = [1, 2, 3]
l.sort(cmp = lambda x, y: y - x)

上面这段代码很轻松就可以敲出来。执行以后l的内容会变成[3,2,1],通过传入不同的cmp函数来实现不同的排序。

但是当列表里存放的是浮点数时,就会有一些问题发生。首先是,会抛出一个异常,告诉你cmp的返回值必须是int型。

l = [1.0, 2.0, 3.0]
l.sort(cmp = lambda x, y: int(y - x))

好,改好了。你要int,我就给你int,上面的代码运行了一下,输出结果满足期待。ok,要是真这样放进实际的项目里,可能会发生大问题。而我调试了很久,发现最后的问题就是出在这里。

在科学计算里,差值经常会很小,比如1.1-1.2=-0.1,那么int(-0.1) = 0。看到了吗?这里cmp的返回就变成了0。0在list.sort的定义里就是不交换元素的位置,因为这两个元素是一样“大小的”,这样list.sort执行时就发生了问题!

def my_cmp(x, y):
temp = y - x
if temp > 0:
return 1
elif temp == 0:
return 0
else:
return -1

l.sort(cmp=my_cmp)

以上是我的解决方法。

总结,只是为了一时的爽快(随手写个匿名函数当参数传递进去解决问题)和形式优美而忽略了真正的计算逻辑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: