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新手们的几道简单练习题
Sep 21 Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 Python
Python API 自动化实战详解(纯代码)
Jun 11 Python
使用Pandas对数据进行筛选和排序的实现
Jul 29 Python
python scipy卷积运算的实现方法
Sep 16 Python
python利用google翻译方法实例(翻译字幕文件)
Sep 21 Python
用python进行视频剪辑
Nov 02 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
Jan 19 Python
Jupyter notebook 不自动弹出网页的解决方案
May 21 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
May 21 Python
python 远程执行命令的详细代码
Feb 15 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
建立文件交换功能的脚本(一)
2006/10/09 PHP
谨慎使用PHP的引用原因分析
2012/09/06 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
jquery append与appendTo方法比较
2017/05/24 jQuery
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
vue父子模板传值问题解决方法案例分析
2020/02/26 Javascript
JavaScript代码实现简单计算器
2020/12/27 Javascript
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
python的keyword模块用法实例分析
2015/06/30 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
厨师岗位职责
2013/11/12 职场文书
美容师的职业规划书
2013/12/27 职场文书
大学生社会实践评语
2014/04/25 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
课外活动实习计划
2015/01/19 职场文书
初三毕业感言
2015/07/31 职场文书
golang import自定义包方式
2021/04/29 Golang