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之模块的加载
Oct 24 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
Jul 06 Python
分享一个可以生成各种进制格式IP的小工具实例代码
Jul 28 Python
基于python(urlparse)模板的使用方法总结
Oct 13 Python
python语音识别实践之百度语音API
Aug 30 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
Oct 21 Python
Python将字符串常量转化为变量方法总结
Mar 17 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
python 类之间的参数传递方式
Dec 20 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 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
php Smarty初体验二 获取配置信息
2011/08/08 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
python3 实现调用串口功能
2019/12/26 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
国外的一些J2EE面试题一
2012/10/13 面试题
会议邀请函范文
2014/01/09 职场文书
党在我心中演讲稿
2014/09/02 职场文书
2014年纪检工作总结
2014/11/12 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
三行辞职书范文
2015/02/26 职场文书
第一书记观后感
2015/06/08 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS
mysql 获取时间方式
2022/03/20 MySQL
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技