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控制台显示时钟的示例
Feb 24 Python
python3生成随机数实例
Oct 20 Python
数据挖掘之Apriori算法详解和Python实现代码分享
Nov 07 Python
学习python之编写简单乘法口诀表实现代码
Feb 27 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
Nov 02 Python
mysql 之通过配置文件链接数据库
Aug 12 Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 Python
使用python3构建文件传输的方法
Feb 13 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
如何在Django项目中引入静态文件
Jul 26 Python
python脚本执行CMD命令并返回结果的例子
Aug 14 Python
关于python 的legend图例,参数使用说明
Apr 17 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
咖啡知识大全
2021/03/03 新手入门
人大复印资料处理程序_查询篇
2006/10/09 PHP
FCKeditor添加自定义按钮
2008/03/27 PHP
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
PHP查询快递信息的方法
2015/03/07 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
javascript操作数组详解
2014/12/17 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
DOM 高级编程
2015/05/06 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
Python实现将xml导入至excel
2015/11/20 Python
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
python图像常规操作
2017/11/11 Python
python后端接收前端回传的文件方法
2019/01/02 Python
Python第三方库h5py_读取mat文件并显示值的方法
2019/02/08 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
python 实现按对象传值
2019/12/26 Python
opencv python图像梯度实例详解
2020/02/04 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
运动会表扬稿大全
2014/01/16 职场文书
专业求职信撰写要诀
2014/02/18 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
解除合同协议书
2014/04/17 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
公司文体活动总结
2015/05/07 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android