加速你的Python

当你寻找这种问题的时候,很开心,你的代码水平以及对python的各种数据类型的认知会上升一个台阶!
我是什么时候开始思考这种问题的呢?当然是有一天发现模型跑数据的时候,程序一直在运行但却一直不出最终结果,然后发现作者写的代码真的是低效,不得不说,会写模型的人不一定会写代码!

一、加速代码查找

1. 用 set 而非 list 进行查找(初学者的通病)

低效方法:

list_data = [i for i in range(1000000)]

1098987 in list_data   # 13.4 ms

高效方法:

set_data = set(list_data)

1098987 in set_data   # 10.3 us

原理很简单:list 是线性查找(即从前向后一个元素一个元素的查找),set 是通过hash查找(通过hash函数直接定位)

2. 用 dict 而非两个 list 进行匹配查找

低效方法:

list_a = [i for i in range(1000000)]
list_b = [i**2 for i in list_a]

print(list_b[list_a.index(876567)])  # 7.5 ms

高效方法:

dict_ab = dict(zip(list_a, list_b))

print(dict_ab.get(876567, None))   # 141 us 

二、加速你的循环

在循环中避免重复计算

低速方法:

a = [i for i in range(2000)]

b = [i/sum(a) for i in a]  # 32.8 ms

高效方法:

sum_a = sum(a)

b = [i/sum_a for i in a]  # 266 us

三、使用多进程

可以参考我之前博文 一篇文章学习python多进程

最后最后,其实还有很多加速的方法,不过上述是我目前常用到的方式啦,想了解更多参见24式加速你的Python

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值