美文网首页
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