import time # 用于计时的模块导入
import numpy as np # 最常使用的numpy数据处理模块
#创建一个1~10000000的列表,然后分别以for循环的方式,列表解析的方式以及numpy数组函数的方式来对列表中每个元素计算平方
num_list = range(1,10000000,1)
#for循环计算计时
for_time1 = time.time()
num_list_new1 = []
for n in num_list:
num_list_new1.append(pow(n,2))
for_time2 = time.time()
for_elapse_time = for_time2 - for_time1
#列表解析计算计时
list_time1 = time.time()
num_list_new2 = [pow(n,2) for n in num_list]
list_time2 = time.time()
list_elapse_time = list_time2 - list_time1
#numpy一维数组计算计时
numpy_time1 = time.time()
num_array = np.array(num_list)
num_list_new3 = list(np.power(num_array,2))
numpy_time2 = time.time()
numpy_elapse_time = numpy_time2 - numpy_time1
#显示三种计算的计时
print(“for_elapse_time = %f” % for_elapse_time)
print(“list_elapse_time = %f” % list_elapse_time)
print(“numpy_elapse_time = %f” % numpy_elapse_time)
计算结果如下:
for_elapse_time = 7.633032
list_elapse_time = 5.294393
numpy_elapse_time = 2.268097
可以看到for循环是最慢的循环计算,列表解析相比for循环会更快一些,而最快的是Numpy数组计算,这是因为for循环和列表解析都是针对目标列表的每个元素分别单独去计算,有多少个元素,就存在多少个指针,占用CPU和内存都很大,存储地址也不连续,访问耗时也因此很多,而Numpy是将列表中都是同类型的元素处理成了一个一维数组,只需要一个指针,计算类似于对一个矩阵进行计算处理。
关于列表解析为何比for循环要快,可以参看如下链接的文章
https://blog.csdn.net/qq_32793161/article/details/125789881
因此在实际项目开发过程中,不到万不得已千万不用for循环,尽量优先选择Numpy的数组计算,其次才考虑列表解析。