python奇技淫巧:性能优化(一)

python性能优化

python奇技淫巧:性能优化(一)

python奇技淫巧:性能优化(一)

python奇技淫巧:性能优化(一)

01 在列表里面计数

python奇技淫巧:性能优化(一)

性能:第二种计数方法比第一种快不要太多,因为Python原生的内置函数都是优化过的,所以能用原生的计算的时候,尽量用原生的函数来计算,所以能用原生的内置的数据结构,一定要用原生的(集合set去重也类似)。

02 过滤一个列表

python奇技淫巧:性能优化(一)

性能:第二种方法有可能比第一种慢,有人可能觉得filter应该会快一些,其实filter增加了复杂度,返回一个迭代对象再用list转化为一个列表,所以开销大一些。其实最快是推导列表,比第一种性能快(这里仅仅是对于列表而言,如果不用转化为列表,那么高阶函数(map,filter等)就更快)。

03 列表成员检查

python奇技淫巧:性能优化(一)

python奇技淫巧:性能优化(一)

性能:第二种比第一种快近一倍,直接用in这样的方法检查列表内部成员比遍列要快很多的,然而更快的是使用第三:用set而非list进行查找

04 列表的排序

python奇技淫巧:性能优化(一)

性能:第二种比第一种快了近6倍,sorted函数会把原来的列表进行排序然后再返回一个新的列表,而sort函数直接再原来的列表上面排序,节省了开销。

05 把迭代循环放到函数里面

python奇技淫巧:性能优化(一)

性能:第二种明显要比第一种快,原因是因为把重复的循环直接放到了一次性的塞入函数,避免了多次调用函数的开销。

06 检查列表是否为空(检查是否为True)

python奇技淫巧:性能优化(一)

性能:一个更比一个快。

07 使用[ ] {} 而不是list(),dict ()

python奇技淫巧:性能优化(一)

性能:没有对比没有伤害,因为Python一切皆对象,所以当你用list()生成一个对象的时候会产生开销,而[]直接返回一个list,会快很多,同理dict也是一样的。

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

python奇技淫巧:性能优化(一)

 

性能:dict方法更快

09 优先使用for循环而不是while循环

python奇技淫巧:性能优化(一)

性能:for循环更快

10 循环体中避免重复计算

python奇技淫巧:性能优化(一)

 

11 用循环机制代替递归函数

python奇技淫巧:性能优化(一)

12 用缓存机制加速递归函数

python奇技淫巧:性能优化(一)

13 用numba加速Python函数

python奇技淫巧:性能优化(一)

14 使用collections.Counter加速计数

python奇技淫巧:性能优化(一)

使用np.array代替list

低速方法

python奇技淫巧:性能优化(一)

高速方法

python奇技淫巧:性能优化(一)

使用np.ufunc代替math.func

低速方法

python奇技淫巧:性能优化(一)

高速方法

python奇技淫巧:性能优化(一)

使用np.where代替if

低速方法

python奇技淫巧:性能优化(一)

python奇技淫巧:性能优化(一)

高速方法

python奇技淫巧:性能优化(一)

用csv文件读写代替excel文件读写

低速方法

python奇技淫巧:性能优化(一)

高速方法

python奇技淫巧:性能优化(一)

使用pandas多进程工具pandarallel

低速方法

python奇技淫巧:性能优化(一)

python奇技淫巧:性能优化(一)

高速方法

python奇技淫巧:性能优化(一)

使用dask加速dataframe

低速方法

python奇技淫巧:性能优化(一)

高速方法

python奇技淫巧:性能优化(一)

使用dask.delayed进行加速

低速方法

python奇技淫巧:性能优化(一)

python奇技淫巧:性能优化(一)

高速方法

python奇技淫巧:性能优化(一)

应用多线程加速IO密集型任务

低速方法

python奇技淫巧:性能优化(一)

高速方法

python奇技淫巧:性能优化(一)

应用多进程加速CPU密集型任务

低速方法

python奇技淫巧:性能优化(一)

高速方法

python奇技淫巧:性能优化(一)