栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

还可以这样?!【Python小技巧】一种高效的整数提取方法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

还可以这样?!【Python小技巧】一种高效的整数提取方法

嗨害大家好鸭,我是小熊猫

今天遇见这样一个问题:

Python怎么从一堆数字里取其中的整数?

比如有1.2, 5.9, .7.4, 6 这几个数,怎么把里面的整数取出来

如果你经常用Python的话,肯定能举出起码五六种方法来解决这问题(不考虑效率的话),例如:

◾转字符之后,用正则表达式

◾判断是否有小数点

◾字符转换回整数是否触发异常

◾使用isinstance或者type方式进行类型对比

……

但是核心一点,就是大家通常都会用迭代来继续对比,例如:

饿……上面图请忽略,下面才是Python的迭代:

for num in [1,1.1,2.0,3,4,0.6]:      
   if isinstance(num,int):   
      res.append(num)

那么既然今天说的是一种高效的方法,那么那些所谓的转换来转换去的,肯定第一时间就直接pass掉了,测试如下:

首先构建了两个list,里面分别有100万个整数和100万个浮点数,组合起来之后进行shuffle打乱顺序。

下面进行第一种方式测试,使用最传统的迭代对比:

可以看见,对200万个对象进行迭代对比,平均耗时为366ms,效率还行。

既然我们用的Python,自然要去试一下Python特色的写法,比如链表推导式:

使用Python特有的语法链表推导式,效率比直接for循环要快一点点,不过经过我后续测试,是因为因为for会连续调用append的耗时(这点效率就忽略不记了)。

下面进入正式的Python特色环节——调包,我们来使用Python里面最强大的数值包numpy来实现:

方法如下:

从300多毫秒,一下就提升到了

16毫秒

……20多倍的提升,果然不亏是Python第一神包之称。

从上面的代码看,非常简单,首先把整个list里面的对象全部转换为整数,然后用转换后的数值和原来数值进行对比,如果不一样,则是浮点数。

不过这种功能有一个小问题,就是7这种整数数,如果和7.0放在一起,就会直接被转换为float型(numpy的矩阵会统一类型),然后转换回整数,也就得到的全部都是整数了:

不过从

数学上来说

……好像也没有毛病,7.0本来就是整数,但是从计算机角度来说,int和float的存储字段是不一样的,如下所示,0.0和整数对比,得到的False

所以使用场合,就看你是用于数学计算,还是对象对比了,

在不同的场合,需要选用不同的方法来实现。

有什么python相关报错解答自己不会的、或者源码资料/模块安装/女装大佬精通技巧 都可以来这里:(https://jq.qq.com/?_wv=1027&k=2Q3YTfym)或者文末私号

嗨害~打完收工!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号