Python 中list ,set,dict的大规模查找效率对比详解


Posted in Python onOctober 11, 2019

很多时候我们可能要频繁的进行元素的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 相关文章推荐
Python使用metaclass实现Singleton模式的方法
May 05 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
详解Python安装scrapy的正确姿势
Jun 26 Python
Python定义二叉树及4种遍历方法实例详解
Jul 05 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
Pyinstaller打包.py生成.exe的方法和报错总结
Apr 02 Python
python numpy存取文件的方式
Apr 01 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
使用Pytorch搭建模型的步骤
Nov 16 Python
解决python3.x安装numpy成功但import出错的问题
Nov 17 Python
python双向链表实例详解
May 25 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 #Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 #Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 #Python
Python中的延迟绑定原理详解
Oct 11 #Python
python pycharm的安装及其使用
Oct 11 #Python
详解Python3迁移接口变化采坑记
Oct 11 #Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
Oct 11 #Python
You might like
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
Yii2单元测试用法示例
2016/11/12 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
Python实现的批量下载RFC文档
2015/03/10 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
盛大笔试题
2016/11/05 面试题
部队2014年终工作总结
2014/11/27 职场文书
人民检察院起诉书
2015/05/20 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书