美文网首页视觉艺术
python内置数据类型列表list和字典dict的性能

python内置数据类型列表list和字典dict的性能

作者: 金融测试民工 | 来源:发表于2020-03-21 15:36 被阅读0次

    我们来讨论下python的两种最重要的内置数据类型列表list和字典dict上,各种操作的复杂度。

对比list和dict的操作

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

1、按索引取值和赋值(v=a[i],a[i]=v)

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

2、列表的曾长,可以选择append()和_add_() "+"

list.append(v)的执行时间O(1)

list = list + [v],执行时间是O(n+k),因为新增了一个新的列表,其中k是被加的列表长度

举例:4种生成前n个整数列表的方法

如图:

4种生成前n个整数列表的方法

我们可以计算一下这四个函数的耗时,如下

使用timeit模块对函数计时

执行结果:

执行结果

我们可以看到,4种方法运行时间差别很大,test1使用列表连接最慢,而test4使用list range最快,速度相差近200倍。

    如下图,我们总结下list基本操作的性能如何:

list操作性能

上图可知pop()从列表末尾移除元素O(1),但是pop(i)从列表中间移除元素要O(n),为什么呢?

因为从中部移除元素,要把移除元素后面的元素全部向前挪一位,才保证了列表按索引取值和赋值很快,达到O(1)。

dict数据类型:

    字典和列表不同,dict根据key找到value,而list根据index。

    字典最常用的取值get和赋值set,其性能为O(1),而contain(in)操作判断字典是否存在某个key,其性能也是O(1)

字典操作性能

list和dict的in操作对比:

    设计一个性能试验,验证list中检索一个值,对比dict中检索一个值的耗时对比。如下程序:

如果如下:

运行结果

可见list的in操作复杂度为O(n)

PS:大家可以去python官方的算法复杂度网站看看:

https://wiki.python.org/moin/TimeComplexity

相关文章

网友评论

    本文标题:python内置数据类型列表list和字典dict的性能

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