Python中in和has_key的性能比较

  最近写了一个代码中需要判断一个字典D是否包含某个键值item,然后我使用了if item in D.keys():,结果发现耗时很严重,于是改成if D.has_key(item),速度马上变快了很多。查阅了一些资料后,发现有一种说法是has_key是python2保留的api,在python3中已经被删去,一般用if item in D。因此决定继续探索这三种用法的的性能差别。

时间消耗对比

  对字典大小为100到10000的字典分别使用in Din D.keys()has_key判断键值是否存在,记录它们的时间消耗,并画出图形,代码如下。

import time
from matplotlib import pyplot as pltn = 10000
time1 = []
time2 = []
time3 = []
for n in range(100,10100,100):my_dict = {}for i in range(n):my_dict[i] = istart = time.time()for i in range(n):if i in my_dict.keys():passend = time.time()print end - starttime1.append(end - start)start = time.time()for i in range(n):if my_dict.has_key(i):passend = time.time()print end - starttime2.append(end - start)start = time.time()for i in range(n):if i in my_dict:passend = time.time()print end - starttime3.append(end - start)t = range(100,10100,100)
plt.plot(t, time1, label='in keys()')
plt.plot(t, time2, label='has_key')
plt.plot(t, time3, label='in')
plt.legend()
plt.show()


  可见D.has_key要比in D.keys()快得多,而in DD.has_key要稍微快一点。

结论

  在判断一个值item是否是某个字典D的键值时,最佳的方法是if item in D,它是最快的,其次的选择是if D.has_key(item),绝对不要使用if itme in D.keys()

Python中in和has_key的性能比较相关推荐

  1. [云炬python学习笔记]Numpy中内置函数min(),max(),sum()与Python中内置函数min(),max(),sum()性能对比分析

    众所周知,Python有许多内置函数(例如min(),max(),sum()),Numpy也有自己的内置函数(np.min(),np.max(),np.sum()).由于Numpy的函数是在编译码中执 ...

  2. python中if的效率_Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

  3. python列表去重函数_对python中两种列表元素去重函数性能的比较方法

    测试函数: 第一种:list的set函数 第二种:{}.fromkeys().keys() 测试代码: #!/usr/bin/python #-*- coding:utf-8 -*- import t ...

  4. 它号称 Python 中性能最高的异步 Web 框架:超详细 Sanic 入门指南!

    △点击上方"Python猫"关注 ,回复"2"加入交流群 作者:古明地盆 来源:https://www.cnblogs.com/traditional/p/14 ...

  5. python循环语句-详解Python中的循环语句的用法

    一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...

  6. python中doc=parased.getroot()_python实例手册.py

    python实例手册 #encoding:utf8 # 设定编码-支持中文 0 说明 手册制作: 雪松 littlepy www.51reboot.com 更新日期: 2016-01-21 欢迎系统运 ...

  7. python的for语句-详解Python中的循环语句的用法

    一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...

  8. python中bd是什么属性_bd2.1 Python 基础-基础语法

    Python2 中相对路径的 import 会导致标准库导入变得困难(想象一下,同一目录下有file.py,如何同时导入这个文件和标准库file). Python3 中这一点将被修改,如果还需要导入同 ...

  9. python中的新式类与旧式类的一些基于descriptor的概念(上)

    python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...

  10. 全面理解Python中的类型提示(Type Hints)

    众所周知,Python 是动态类型语言,运行时不需要指定变量类型.这一点是不会改变的,但是2015年9月创始人 Guido van Rossum 在 Python 3.5 引入了一个类型系统,允许开发 ...

最新文章

  1. C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
  2. android layout后还原位置,Android图片框架photoview如何记住所有状态并还原,包括缩放度,缩放后的移动的距离等等...
  3. 反射机制源码及原理学习
  4. Java学习日志(一)
  5. 【自动驾驶】摄像头单目测距原理及实现
  6. 理解神经网络函数高频成分的收敛率界限
  7. C++总结笔记(十)——堆区内存开辟数组和二级指针
  8. 三面美团Java岗,尚学堂java马士兵全套
  9. 给与 x 距离不超过 d 的点权值 a_一年级不上网课,妈妈陪孩子一起来完成三单元各课练习及单元卷吧...
  10. C# 控制台如何播放音频文件
  11. 怎么快速找到:附近的人
  12. [深入研究4G/5G/6G专题-58]: - L3信令控制-7-关键概念和常见问题之信道、UE 上下文, RRC连接,SRB0/1/2, DRB Bear。
  13. 【Unity3d】存档与读档
  14. mysql的时间模糊chax_MySQL™ 参考手册(通用安装指南)
  15. Burp Suite爆破模块中的四种模式的区别详解和演示(暴力破解)
  16. vmware 静态ip上网 防止切换网络换ip
  17. 摄影测量——无人机航线规划软件易飞(附易飞软件下载)
  18. C++构造函数初始化列表与构造函数中的赋值的区别
  19. armbian 斐讯n1_记录一下斐讯N1盒子刷Armbian的各种坑
  20. 机器人“嘚瑟”怎么办?用加速度指令“hold”住它!

热门文章

  1. JS中的attribute和property的区别和联系
  2. 你真的懂Java的ArrayList吗?
  3. Windows定时关机小程序
  4. 关于AOSP与AOKP
  5. Linux的拓扑结构,linux底下的makefile框架拓扑结构分析
  6. 【微信小程序】图库——(小程序篇)
  7. php interface类,类相关的关键字 - interface
  8. ipad MOV转mp4
  9. 求超大文件上传方案( c# )
  10. 城市大脑建设典型实践及经验启示