还可以这样?!【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)或者文末私号

嗨害~打完收工!
请添加图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值