python数据类型的性能--算法复杂度

python两种内置数据类型上各个操作的大O数量级

列表list和字典dict

对比list和dict的操作

v2-b65d72b32e49f916053f00a8680933b8_b.jpg

80/20准则:80%的功能其使用率只有20%

所以越常用的功能,优化的越好,性能就越好

list列表数据类型常用的操作性能

最常用的是:按索引取值和赋值(v=a[i],a[i]=v)

        由于列表的随机访问的特性,这两个操作执行的时间与大小无关,均为O(1)
      

列表增长:可以选择append()+

        lst.append(v),执行时间是O(1)
lst=lst+[v],执行时间是O(n+k),其中k是被加的列表长度
      

我们来举个例子如何计算性能

下面是4种生成n个列表的方法

  1. 循环连接列表(+)方式生成
  2. append方法添加元素生成
  3. 列表推导式
  4. range函数调用转成列表
        def text1():
    # 1. 循环连接列表(+)方式生成
    l = []
    for i in range(1000):
        l=l+[i]

def text2():
    # 2. append方法添加元素生成
    l=[]
    for i in range(1000):
        l.append(i)

def text3():
    # 3. 列表推导式
    l=[i for i in range(1000)]

def text4():
    # 4. range函数调用转成列表
    l = list(range(1000))
      

我们分别运行这些函数,并计时

这里使用timeit模块来对其计时

代码如下:

        from timeit import Timer
def text1():
    # 1. 循环连接列表(+)方式生成
    l = []
    for i in range(1000):
        l=l+[i]

def text2():
    # 2. append方法添加元素生成
    l=[]
    for i in range(1000):
        l.append(i)

def text3():
    # 3. 列表推导式
    l=[i for i in range(1000)]

def text4():
    # 4. range函数调用转成列表
    l = list(range(1000))


if __name__ == "__main__":
    t1 = Timer('text1()','from __main__ import text1')
    print('text1. %f s'% t1.timeit(number=1000))
    t2 = Timer('text2()','from __main__ import text2')
    print('text2. %f s'% t2.timeit(number=1000))
    t3 = Timer('text3()','from __main__ import text3')
    print('text3. %f s'% t3.timeit(number=1000))
    t4 = Timer('text4()','from __main__ import text4')
    print('text4. %f s'% t4.timeit(number=1000))
      

这里是把每个函数都运行了1000次并计时

运行结果:

        text1. 2.097764 s
text2. 0.114630 s
text3. 0.061288 s
text4. 0.022224 s
      

这里可以清楚的看到,这四种方法运行时间的差距还是比较大的 最慢的是text1函数,用的是循环连接列表(+)方式生成 最快的是text4函数,用的是range函数调用转成列表生成

List基本操作的大O数量级


v2-0d2254a273c83b29de48288449917084_b.jpg


Dict基本操作的大O数量级


v2-90c72e67fc35a5787de13d562d036d08_b.jpg


python官方的算法复杂度网站

TimeComplexity - Python Wiki

发布了83 篇原创文章 · 获赞 26 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/qq_37462361/article/details/104629260