测试代码如下
from timeit import Timer
def fun1():
a = []
for i in range(10000):
li = [i]
a = a + li
def fun2():
a = [i for i in range(10000)]
def fun3():
a = []
for i in range(10000):
a.append(i)
def fun4():
a = list(range(10000))
def fun5():
a = []
for i in range(10000):
a.extend([i])
# fun1()
# fun2()
# fun3()
# fun4()
# fun5()
time1 = Timer("fun1()", "from __main__ import fun1")
print("time1:", time1.timeit(500))
time2 = Timer("fun2()", "from __main__ import fun2")
print("time2:", time2.timeit(500))
time3 = Timer("fun3()", "from __main__ import fun3")
print("time3:", time3.timeit(500))
time4 = Timer("fun4()", "from __main__ import fun4")
print("time4:", time4.timeit(500))
time5 = Timer("fun5()", "from __main__ import fun5")
print("time5:", time5.timeit(500))
执行结果如下,可以发现第一种两个列表相加的方式最慢,其他几种时间差不多:
再对比下append和insert方法的效率:
def fun6():
a = []
for i in range(10000):
a.append(i)
def fun7():
a = []
for i in range(10000):
# 插入到头部
a.insert(0, i)
def fun8():
a = []
for i in range(10000):
# 插入到尾部
a.insert(-1, i)
time6 = Timer("fun6()", "from __main__ import fun6")
print("time6:", time6.timeit(500))
time7 = Timer("fun7()", "from __main__ import fun7")
print("time7:", time7.timeit(500))
time8 = Timer("fun8()", "from __main__ import fun8")
print("time8:", time8.timeit(500))
执行结果,插入到头部需要更新列表中后面所有数据的位置,所以最耗时: