python timeit模块及列表操作时间

timeit模块

timeit模块可以用来测试一小段Python代码的执行速度。

class timeit.Timer(stmt=‘pass’, setup=‘pass’, timer=)

Timer是测量小段代码执行速度的类。
stmt参数是要测试的代码语句(statment);

setup参数是运行代码时需要的设置;

两个参数都是字符串。 第一个参数是你要计时的语句或者函数。 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导入语句。 从内部讲, timeit 构建起一个独立的虚拟环境, 手工地执行建立语句,然后手工地编译和执行被计时语句。

另外需要补充一点是,如果你想直接 stmt 那里执行函数。可以把函数申明在当前文件中,然后在 stmt = ‘func()’ 执行函数。然后使用 setup = ‘from main import func’ 即可,如果要import 多个需要使用 setup = from main import func; import simplejson’

timer参数是一个定时器函数,与平台有关。

timeit.Timer.timeit(number=1000000)

Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为1000000次。方法返回执行代码的平均耗时,一个float类型的秒数。

以下是五种生成列表的方式,以及测试生成列表用的时间

from timeit import Timer

def t1():
    li=[]
    for i in range(10000):
        li.append(i)
def t2():
    li=[]
    for i in range(10000):
        li=li+[i]

def t3():
    li = [i for i in range(10000)]

def t4():
    li = list(range(10000))

def t5():
    li=[]
    for i in range(10000):
        li.extend(i)

timer1=Timer('t1()','from __main__ import t1')#02——list作为启动文件名字是__main__
print('append:',timer1.timeit(10000))

timer2=Timer('t2()','from __main__ import t2')
print('+:',timer2.timeit(10000))

timer3=Timer('t3()','from __main__ import t3')
print('[i for i in range]:',timer3.timeit(10000))

timer4=Timer('t4()','from __main__ import t4')
print('list(range):',timer4.timeit(10000))

timer5=Timer('t5()','from __main__ import t5')
print('extend:',timer4.timeit(10000))

可以看到用+的方式用时比较长,因为是生成另一个列表后在指向原来的列表
在这里插入图片描述

在链表末尾添加操作和开头插入操作

def t6():
    li=[]
    for i in range(10000):
        li.append(i)

def t7():
    li=[]
    for i in range(10000):
        li.insert(0,i)

timer6=Timer('t6()','from __main__ import t6')
print('append:',timer6.timeit(2000))

timer7=Timer('t7()','from __main__ import t7')
print('insert:',timer7.timeit(2000))

由于在开头插入,后面的数据都需要移动,所以插入的时间复杂度为o(n)
append的时间复杂度为o(1)
在这里插入图片描述
根据值查找索引和根据索引查找值

def t8():
    li = list(range(100000))
    a=li.index(99999)

def t9():
    li = list(range(100000))
    a=li[99999]

timer8=Timer('t8()','from __main__ import t8')
print('查找值:',timer8.timeit(1000))

timer9=Timer('t9()','from __main__ import t9')
print('查找下标:',timer9.timeit(1000))

根据值查找索引时间复杂度为o(n)
根据索引查找值时间复杂度为o(1)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值