时间:2021-05-22
很多时候我们可能要频繁的进行元素的find 或in操作,本人一直天真的以为python的list做了hash,通过红黑树来高效查找···直到今天我真正来测试它和set,dict的查找效率时,才发现自已想太多了!!!!
先看代码:
__author__ = 'jmh081701'import numpyimport timel=[]sl=set()dl=dict()r=numpy.random.randint(0,10000000,100000)for i in range(0,100000): l.append(r[i]) sl.add(r[i]) dl.setdefault(r[i],1)#生成3种数据结构供查找,常规的list,集合sl,字典dl.里面的元素都是随机生成的,为什么要随机生成元素?这是防止某些结构对有序数据的偏向导致测试效果不客观。start=time.clock()for i in range(100000): t=i in slend=time.clock()print("set:",end-start)#计算通过set来查找的效率start=time.clock()for i in range(100000): t=i in dlend=time.clock()print("dict:",end-start)#计算通过dict的效率start=time.clock()for i in range(100000): t=i in lend=time.clock()print("list:",end-start)#计算通过list的效率结果:
set: 0.01762632617301519dict: 0.021149536796960248···········呵呵呵呵···list等了20分钟都没出结果。
所以···结果一览无余啊。
查找效率:set>dict>list
单次查询中:看来list 就是O(n)的;而set做了去重,本质应该一颗红黑树(猜测,STL就是红黑树),复杂度O(logn);dict类似对key进行了hash,然后再对hash生成一个红黑树进行查找,其查找复杂其实是O(logn),并不是所谓的O(1)。O(1)只是理想的实现,实际上很多hash的实现是进行了离散化的。dict比set多了一步hash的过程,so 它比set慢,不过差别不大。
so,如果是要频繁的查找,请使用set吧!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Python中,使用for循环可以迭代容器对象中的元素,这里容器对象包括是列表(list)、元组(tuple)、字典(dict)、集合(set)等。但是,为什么
如下所示:list=[1,2,3,4,5,6,7,5,4,3,2,12]set=set(list)dict={}foriteminset:dict.update
python的数据类型有:数字(int)、浮点(float)、字符串(str),列表(list)、元组(tuple)、字典(dict)、集合(set)。一般通过
python的数据类型有:数字(int)、浮点(float)、字符串(str),列表(list)、元组(tuple)、字典(dict)、集合(set)一般通过以
dict的很多方法跟list有类似的地方,下面一一道来,并且会跟list做一个对比嵌套嵌套在list中也存在,就是元素是list,在dict中,也有类似的样式: