数据结构之列表 timeit
timeit模块
timeit模块可以用来测试一小段python代码的执行速度
class timeit.Timer(stmt=‘pass’,setup=‘pass’,timer=)
Timer是测量小段代码执行速度的类
stmt参数是要测试的代码语句(statment)
setup参数是运行代码时需要的设置
timer参数是一个定时器函数,与平台有关
timeit.Timer.timeit(number=1000000)
Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为1000000次。方法返回执行代码的平均耗时,一个float类型的秒数
python列表类型不同操作的时间效率python生成列表的常见形式有一下四种:
- 两个列表的相加
- 列表生成器
- 可迭代对象转化为列表
- 对空列表进行元素追加
对于以上四种形式,自定义四种函数实现
from timeit import Timer
# 对空列表进行元素追加
def test1():
li = []
for i in range(10000):
li.append(i)
def test2():
li = []
for i in range(10000):
li = li + [i]
def test3():
li = [i for i in range(10000)]
def test4():
li = list(range(10000))
time1 = Timer('test1()', 'from __main__ import test1')
print('append追加:', time1.timeit(1000))
time2 = Timer('test2()', 'from __main__ import test2')
print('求和:', time2.timeit(1000))
timer3 = Timer('test3()', 'from __main__ import test3')
print("列表生成器:", timer3.timeit(1000))
timer4 = Timer('test4()', 'from __main__ import test4')
print("可迭代对象转化:", timer4.timeit(1000))
运行结果:
from timeit import Timer
def test5():
li = []
for i in range(10000):
li.append(i)
def test6():
li = []
for i in range(10000):
li.insert(0, i) # 头部插入
time5 = Timer('test5()', 'from __main__ import test5')
print('append:', time5.timeit(1000))
time6 = Timer('test6()', 'from __main__ import test6')
print('insert:', time6.timeit(1000))
运行结果:
结果来看尾部添加的效率明显优于头部添加,这与python的列表数据存储方式决定的 同理,pop删除元素方式,从队头删除的效率要远远低于从队尾删除元素的效率。