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 相关文章推荐
centos下更新Python版本的步骤
Feb 12 Python
python实现颜色rgb和hex相互转换的函数
Mar 19 Python
python样条插值的实现代码
Dec 17 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
使用matlab或python将txt文件转为excel表格
Nov 01 Python
python @propert装饰器使用方法原理解析
Dec 25 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
Python爬取豆瓣数据实现过程解析
Oct 27 Python
Python List remove()实例用法详解
Aug 02 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
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
node.js require() 源码解读
2015/12/13 Javascript
AngularJS入门之动画
2016/07/27 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
在Python程序中实现分布式进程的教程
2015/04/28 Python
python获得文件创建时间和修改时间的方法
2015/06/30 Python
Python的Django框架中if标签的相关使用
2015/07/15 Python
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
个性大学生自我评价
2013/12/04 职场文书
工作会议欢迎词
2014/01/16 职场文书
广告语设计及教案
2014/03/21 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
MySQL创建管理LIST分区
2022/04/13 MySQL