文档章节

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

sooshian
 sooshian
发布于 2015/01/14 23:25
字数 408
阅读 227
收藏 0

这两天写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)

以上是我的解决方法。

总结,只是为了一时的爽快(随手写个匿名函数当参数传递进去解决问题)和形式优美而忽略了真正的计算逻辑。

© 著作权归作者所有

共有 人打赏支持
sooshian
粉丝 3
博文 7
码字总数 4994
作品 0
成都
私信 提问
python3测试工具开发快速入门教程9重要的标准库-高级篇

日志 logging模块提供了完整和灵活的日志系统。 输出如下: 默认捕获信息和调试消息不会输出,输出为准错误流。可输出信息到email,数据报文,socket或者HTTP服务器。过滤器可以基于DEBUG、I...

python人工智能测试开发
2018/09/04
0
0
复习0610—Python数据类型

程序就是 算法 + 数据结构 Python 中,自带数据类型。常见的数据类型包括:数值类型、字符串类型、群集类型。 一、数值类型 在Python中,数值类型包括整型、浮点型、布尔型、复数型。 【1】整...

python初雪之路
2018/06/10
0
0
跟上时代的步伐,学一波Python(一)

注:笔记整理自《Python编程:从入门到实践》 1. 环境搭建 OS X系统默认安装了 Python2,我们需要到Python官网下载Python3 Windows系统下需要下载Python2和Python3 Python下载地址 命令行输入...

朱敏_ITer
2017/12/26
0
0
[雪峰磁针石博客]python3快速入门教程9重要的标准库-高级篇

[雪峰磁针石博客]python3快速入门教程 输出格式 reprlib模块为大型的或深度嵌套的容器提供了缩写显示的repr(): pprint提供显示更好的print。 textwrap模块格式化文本段落以适应设定的屏宽: l...

Python测试开发人工智能
2018/06/20
0
0
python语法小细节及小定义(一)

首先,Python是强类型语言,动态类型语言。 那么什么是强类型语言?就是数据类型非常固定的语言,例如说python中的str类型数据和int类型数据不能互相作用。而c和js就是弱类型语言。 动态类型...

戴千岩
2017/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【git工具】git bash

添加别名命令 git bash 下添加 alias: windows 工具:git bash 下添加 alias 配置文件 \Git\etc\bash.bashrc 即可,在gitbash工具目录下的 etc目录下 如: 让git log 命令 简化成 gl,配置如...

echojson
18分钟前
0
0
为什么做java开发的公司需要那么多程序员?

透过现象看本质。 Java是企业应用市场的王者,如果一家非互联网公司用Java,那么十有八九是做企业应用的。 所以,这个问题本质上是:为什么做企业应用的公司需要那么多Java程序员。 开发企业...

老道士
20分钟前
0
0
Go Timer实现原理剖析

简介 快速使用 操作介绍

恋恋美食
39分钟前
2
0
记录一个奇怪的问题

环境:jdk1.8虚拟机参数:-verbose:gc -XX:+PrintGCDetails -Xmx20m -Xms20m -Xmn10m -XX:SurvivorRatio=8  -XX:+HeapDumpOnOutOfMemoryError 可以看出,eden占8M却放不下6M数据,发生了......

暗中观察
今天
2
0
rabbitmq安装教程

RabbitMQ有Windows与Linux版本的,这里先写Windows版本的安装。 以前安装软件总是在百度上找某某安装教程,结果能按照教程安装好的软件真的不多。想起先前以为大牛说的一句话,去官网按照官网...

em_aaron
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部