python性能:不要使用 key in list 判断key是否在list里
使用 key in list 去迭代list会潜在的花费n次迭代才能完成,n为该key在list中位置。允许的话,可以将list转成set或者dict, 因为Python在set或dict中查找元素是通过直接访问他们而不需要迭代,这会高效很多。
反模式
下面的代码定义了一个list类型l,然后调用 if 3 in l去检查3是否在l中。这是低效的。这后面其实是Python一直迭代list,直到找到3或者遍历完list。
l = [1, 2, 3, 4] # iterates over three elements in the list
if 3 in l:
print("The number 3 is in the list.")
else:
print("The number 3 is NOT in the list.")
推荐做法
使用set或dict代替list
改良的代码如下,list转成set。更高效的背后是因为Python中,set尝试直接去访问目标值而不是通过迭代list中的每个元素和目标值相比较。
s = set([1, 2, 3, 4]) if 3 in s:
print("The number 3 is in the list.")
else:
print("The number 3 is NOT in the list.")
python性能:不要使用 key in list 判断key是否在list里的更多相关文章
- Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中
Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中 python 的基本用法请浏览:https://www.cnblogs.com/ibingshan/p/98564 ...
- Python性能提升小技巧
第一部分 1-使用内建函数: 你可以用Python写出高效的代码,但很难击败内建函数. 经查证. 他们非常快速 2-使用 join() 连接字符串. 你可以使用 + 来连接字符串. 但由于string ...
- Python性能鸡汤
http://pythoner.org/wiki/257/ 毫无疑问:Python程序没有编译型语言高效快速. 甚至Python拥护者们会告诉你Python不适合这些领域. 然而,YouTube已用P ...
- Python性能鸡汤(转)
英文原文:http://blog.monitis.com/index.php/2012/02/13/python-performance-tips-part-1/ 英文原文:http://blog.m ...
- python性能对比
python性能对比之items #1 #-*- coding:utf8-*- import datetime road_nodes = {} for i in range(5000000): roa ...
- Python性能鸡汤(转)
英文原文:http://blog.monitis.com/index.php/2012/02/13/python-performance-tips-part-1/ 英文原文:http://blog.m ...
- Python性能优化(转)
分成两部分:代码优化和工具优化 原文:http://my.oschina.net/xianggao/blog/102600 阅读 Zen of Python,在Python解析器中输入 import ...
- Python性能(转)
第一部分 阅读 Zen of Python,在Python解析器中输入 import this. 一个犀利的Python新手可能会注意到"解析"一词, 认为Python不过是另一门 ...
- Python性能优化方案
Python性能优化方案 从编码方面入手,代码算法优化,如多重条件判断有限判断先决条件(可看 <改进python的91个建议>) 使用Cython (核心算法, 对性能要求较大的建议使用C ...
随机推荐
- 美化博客CSS
title: 美化博客CSS date: 2019/01/19 14:28:59 --- 美化博客CSS 可以去这里看下好看的样式 修改下文档的css,博客园是在页面定制CSS代码,我这里修改了下标题 ...
- C#开发Windows服务详细流程
1.Windows服务简单介绍 Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序,主要用于长时间运行的功能或者执行定时任务.一般情况下,用户不能通过用户界面来安装和启 ...
- JN_0006:MongoDB未授权访问漏洞处理
开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作而且可以远程访问数据库. 2.[修复建议]:临时方案:配置AUTH,做好访问认证.打开 ...
- SpringBoot系列: Pebble模板引擎语法介绍
本文基于Pebble官方文档, 对pebble的语法做一些介绍. ===============================Pebble 官方资料========================= ...
- artDialog记录
//在子页面加按钮的方式 var api = frameElement.api, W = api.opener; api.button({ id: 'valueOk', name: '确定', cal ...
- Spring系列(三) Bean装配的高级技术
profile 不同于maven的profile, spring的profile不需要重新打包, 同一个版本的包文件可以部署在不同环境的服务器上, 只需要激活对应的profile就可以切换到对应的环境 ...
- K-means clustering
K-means算法是一种迭代算法,步骤如下: 1.随机初始化K个聚类中心u1,u2,...,uk 2.根据每个样本和各个聚类中心的距离给每个样本打上标签(例如,x(i)与u3的距离最小,则x(i)的标 ...
- sqlite 中的分页语句
2个关键字 select * from testtable limit 2 offset 1;
- iOS rebuild from bitcode对ipa大小的影响
https://developer.apple.com/library/content/technotes/tn2432/_index.html 为了测试一下rebuild from bitcode的 ...
- Mybatis注意点之#与$区别
动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因.mybatis 在对 sql 语句进行预编译之前,会对 sql 进行动态解析,解析为一个 BoundSql ...