美文网首页
Python内置类型性能分析

Python内置类型性能分析

作者: 学人工智能的菜菜 | 来源:发表于2020-04-07 16:11 被阅读0次

timeit模块

官方的解释是
Tool for measuring execution time of small code snippets
即timeit模块可以用来测试一小段Python代码的执行速度
class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)
Timer是测量小段代码执行速度的类。
stmt参数是要测试的代码语句(statment);
setup参数是运行代码时需要的设置,就是从哪里运行;
timer参数是一个定时器函数,与平台有关。
timeit.Timer.timeit(number=1000000)
Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为1000000次。方法返回执行代码的平均耗时,一个float类型的秒数。

list的操作测试

test1 = """
    l = []
    for i in range(1000):
        l = l+[i]"""

test2 = """
    l = []
    for i in range(1000):
        l.append(i)"""

test3 = """
    l = [i for i in range(1000)]"""

test4 = """
    l = list(range(10000))"""

t1 = timeit.Timer(stmt=test1)
print("concat ", t1.timeit(1000), "seconds")
t2 = timeit.Timer(stmt=test2)
print("append ", t2.timeit(1000), "seconds")
t3 = timeit.Timer(stmt=test3)
print("comprehension ", t3.timeit(1000), "seconds")
t4 = timeit.Timer(stmt=test4)
print("list range ", t4.timeit(1000), "seconds")

#运行结果
#concat  1.7421829360894936 seconds
#append  0.081117687196822 seconds
#comprehension  0.035780336566269666 seconds
#list range  0.15885251670817335 seconds

根据运行结果可知,列表解析式是比你append也快很多的,concat是非常慢的,所以平常非常不建议用相加的形式,首选用列表解析式

pop操作测试

x = [i for i in range(10000)]

#删除第一个元素
pop_zero = timeit.Timer(stmt = "x.pop(0)",setup="from __main__ import x")
print("pop_zero ", pop_zero.timeit(number=1000), "seconds")
#尾部删除
pop_end = timeit.Timer(stmt="x.pop()", setup="from __main__ import x")
print("pop_end ",pop_end.timeit(number=1000),"seconds")

输出结果
pop_zero  0.003709113376900391 seconds
pop_end  7.955891000443636e-05 seconds

根据测试,可知pop最后一个元素的速度远比pop头部的要快很多
根据python官网给出的结果可知:

list内置操作的时间复杂度

list.png

dict内置操作的时间复杂度

dict.png

k是代表x-y的区间距离,切片需O(k)的时间复杂度。
以上的内置时间复杂度是python官网的

相关文章

网友评论

      本文标题:Python内置类型性能分析

      本文链接:https://www.haomeiwen.com/subject/wtbgphtx.html