这是一张有关BigYellowCactus答案中使用的计时如何随着列表的长度增加而变化的图表。垂直轴是在usec中初始化两个列表并将一个列表插入另一个列表所需的时间。水平轴是列表中的项目数。
为什么不只是timeit呢?
import timeit
create_data = """\
list_a = range(10)
list_b = range(10)
"""
t1 = timeit.Timer(stmt=create_data + """\
list_a = list_b + list_a
""")
t2 = timeit.Timer(create_data + """\
for item in list_b:
list_a.insert(0, item)
""")
t3 = timeit.Timer(create_data + """\
for item in list_a:
list_b.append(item)
list_a = list_b
""")
t4 = timeit.Timer(create_data + """\
list_a[0:0] = list_b
""")
for i, t in enumerate([t1,t2,t3,t4]):
print i, "%.2f usec/pass" % (1000000 * t.timeit(number=100000)/100000)
结果:
0 0.73用户/通过 1 2.79用户/通过 2 1.66用户/通过 3 0.77用户/通过
:
list_a = list_b + list_a
:
for item in list_b:
list_a.insert(0, item)
:
for item in list_a:
list_b.append(item)
list_a = list_b
:
list_a[0:0] = list_b