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