- Python 语言学习成本低,写出来很像伪代码,可读性高,等等有很多显而易见的优点。相比于其他语言,Python 几乎总是最慢的。导致 Python 我们运行一个脚本的时候,无力吐槽。最恐怖的还是python中的for循环,异常的慢,但是工程中一个项目的周期是有要求的,我们如何让我们的代码跑起来呢?
少写for循环
- 这里所得是少写,而不是不写。有的时候是避免不了的,但是能避免我们还是一定不要写。下面展示for循环和其他方法的时间的差距。
# 生成一个列表
li=[1,2,3,4,5,6,7,8,9,1]*1000
len(li)
%%timeit
# 查看for循环的时间,
li_1 = []
for i in li:
if i==9:
li_1.append(1)
elif i !=9:
li_1.append(0)
li_1
运行结果
1.99 ms ± 23.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
# 推导式实现
li_2 = [i//9 for i in li ]
li_2
运行结果
814 µs ± 15.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
# 高阶函数map
map(lambda x: x//9, li)
运行结果
457 ns ± 4.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
import numpy as np
li_array = np.array(li)
%%timeit
# numpy实现
np.where(li_array!=9,0,1)
运行结果
39.1 µs ± 2.3 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
- 我们知道ms/µs/ns之间的换算单位是1000为刻度。可以看出,for循环最慢,map函数最快,map函数是for循环的
倍,numpy也跑出不错的成绩,numpy底层是C语言写的,大概是for循环的
倍。这还是1万的数据量,在工程中动不动千万,数十亿的数据,更显的for循环的慢慢慢。所以尽量不要写for循环。
网友评论