python性能优化
01 在列表里面计数
性能:第二种计数方法比第一种快不要太多,因为Python原生的内置函数都是优化过的,所以能用原生的计算的时候,尽量用原生的函数来计算,所以能用原生的内置的数据结构,一定要用原生的(集合set去重也类似)。
02 过滤一个列表
性能:第二种方法有可能比第一种慢,有人可能觉得filter应该会快一些,其实filter增加了复杂度,返回一个迭代对象再用list转化为一个列表,所以开销大一些。其实最快是推导列表,比第一种性能快(这里仅仅是对于列表而言,如果不用转化为列表,那么高阶函数(map,filter等)就更快)。
03 列表成员检查
性能:第二种比第一种快近一倍,直接用in这样的方法检查列表内部成员比遍列要快很多的,然而更快的是使用第三:用set而非list进行查找。
04 列表的排序
性能:第二种比第一种快了近6倍,sorted函数会把原来的列表进行排序然后再返回一个新的列表,而sort函数直接再原来的列表上面排序,节省了开销。
05 把迭代循环放到函数里面
性能:第二种明显要比第一种快,原因是因为把重复的循环直接放到了一次性的塞入函数,避免了多次调用函数的开销。
06 检查列表是否为空(检查是否为True)
性能:一个更比一个快。
07 使用[ ] {} 而不是list(),dict ()
性能:没有对比没有伤害,因为Python一切皆对象,所以当你用list()生成一个对象的时候会产生开销,而[]直接返回一个list,会快很多,同理dict也是一样的。
08 用dict而非两个list进行匹配查找
性能:dict方法更快
09 优先使用for循环而不是while循环
性能:for循环更快
10 循环体中避免重复计算
11 用循环机制代替递归函数
12 用缓存机制加速递归函数
13 用numba加速Python函数
14 使用collections.Counter加速计数
使用np.array代替list
低速方法
高速方法
使用np.ufunc代替math.func
低速方法
高速方法
使用np.where代替if
低速方法
高速方法
用csv文件读写代替excel文件读写
低速方法
高速方法
使用pandas多进程工具pandarallel
低速方法
高速方法
使用dask加速dataframe
低速方法
高速方法
使用dask.delayed进行加速
低速方法
高速方法
应用多线程加速IO密集型任务
低速方法
高速方法
应用多进程加速CPU密集型任务
低速方法
高速方法