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 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
深入理解Python 代码优化详解
Oct 27 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
ubuntu16.04制作vim和python3的开发环境
Sep 23 Python
浅谈Python的list中的选取范围
Nov 12 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
Python搭建HTTP服务过程图解
Dec 14 Python
windows下python安装pip方法详解
Feb 10 Python
AUC计算方法与Python实现代码
Feb 28 Python
Python Dataframe常见索引方式详解
May 27 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
python实现经纬度采样的示例代码
Dec 10 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分页函数代码(简单实用型)
2010/12/02 PHP
浅析php静态方法与非静态方法的用法区别
2016/05/17 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
个人党性剖析材料
2014/02/03 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
父母对孩子说的话
2014/04/12 职场文书
暑期培训心得体会
2014/09/02 职场文书
公司租房协议书范本
2014/10/08 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
三下乡活动心得体会
2016/01/23 职场文书
四则混合运算教学反思
2016/02/23 职场文书
mysql sock 文件解析及作用讲解
2022/07/15 MySQL