加速你的Python

mac2022-06-30  98

当你寻找这种问题的时候,很开心,你的代码水平以及对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

最新回复(0)