Python 中list ,set,dict的大规模查找效率对比详解
2019-10-11 18:07
2871 查看
很多时候我们可能要频繁的进行元素的find 或in操作,本人一直天真的以为python的list做了hash,通过红黑树来高效查找・・・直到今天我真正来测试它和set,dict的查找效率时,才发现自已想太多了!!!!
先看代码:
__author__ = 'jmh081701' import numpy import time l=[] 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 sl end=time.clock() print("set:",end-start) #计算通过set来查找的效率 start=time.clock() for i in range(100000): t=i in dl end=time.clock() print("dict:",end-start) #计算通过dict的效率 start=time.clock() for i in range(100000): t=i in l end=time.clock() print("list:",end-start) #计算通过list的效率
结果:
set: 0.01762632617301519 dict: 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吧!
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- Python 中list ,set,dict的大规模查找效率
- python中in在list和dict中查找效率的对比分析
- python的dict,set,list,tuple应用详解
- python之list、tuple、dict、set对比
- Python中的list/tuple/dict/set数据类型详解(转载)
- Python学习笔记 —— list、tuple、dict、set 对比整理
- python的dict,set,list,tuple应用详解
- python中in在list和dict中查找效率比较
- Python3 与 C# 基础语法对比(List、Tuple、Dict、Set专栏)
- Python中的list/tuple/dict/set数据类型详解
- python的dict,set,list,tuple应用详解
- Python中list,tuple,dict,set的区别和用法
- Python之List,Tuple,Set,Dict
- Python中内置数据类型list,tuple,dict,set的区别和用法
- python的dict,set,list,tuple简单分析 老搞混
- Python数据存储 (列表list)(字典dict) (元组typle ) (集合set)(范围 range)
- Python:数据结构(list, tuple, Dict & Set)
- [python]关于字符串查找和re正则表达式的效率对比
- python 之 list,tuple,dict,set
- Python学习笔记-四类数据存储结构:list、tuple、dict以及set