首先准备了常用的四种方法
from timeit import Timer #导入timeit模块对函数计时间
#列表连接
def test1():
l=[]
for i in range(10000):
l+=[i]
#追加列表
def test2():
l=[]
for i in range(10000):
l.append(i)
#列表推导式
def test3():
l=[i for i in range(10000)]
#列表构造器调用range函数
def test4():
l=list(range(10000))
t1=Timer("test1()","from __main__ import test1")
print("concat",t1.timeit(number=1000),"milliseconds")
t2=Timer("test2()","from __main__ import test2")
print("append",t2.timeit(number=1000),"milliseconds")
t3=Timer("test3()","from __main__ import test3")
print("comprehension",t3.timeit(number=1000),"milliseconds")
t4=Timer("test4()","from __main__ import test4")
print("list range",t4.timeit(number=1000),"milliseconds")
要使用timeit模块,首先创建一个Timer对象,其参数是两条Python语句。第一个参数是要为之计时的Python语句;第2个参数是建立测试的语句。
默认情况下,timeit会执行100w次,所以我将number改为1000,执行1000次。
from __main__ import test1:将test1函数从__main__命名空间导入到timeit设置计时的命名空间。
【测试结果】
可以观察到列表连接(concat)最慢,list range最快
列表推导式速度是append两倍的样子
【列表操作常用的大O效率】