当前位置: 首页 > news >正文

Python Cookbook-4.3 若列表中某元素存在则返回之

任务

你有一个列表L,还有一个索引号i,你希望当i是L,的有效索引时获取L[i],若不是有效索引,则返回一个默认值v。如果L是字典,可以使用L.get(i,v)来满足需求,可是列表并没有 get这个方法。

解决方案

很明显,我们得自己写个函数,在这里,最简单直接的方法就是最好的方法

def list_get(L,i,v = None):
	if -len(L) <= i < len(L): return L[i]
	else: return v

讨论

解决方案中的函数根据 Python 的索引规则来检査i的有效性:有效索引只能在大于等于-len(L)和小于 len(L)这个区间中。但如果所有传递给 list_get 函数的参数i都是有效的索引,你可能会喜欢另外一种方式:

def list_getegfp(L,i,v = None):
	try:return L[i]
	except IndexError:return v

但是,除非传递给此函数的索引绝大多数都是有效索引,否则这个函数(通过某些测试工具测量)将会比解决方案中的list_get函数慢4倍。因此,这个“获得原谅总是比获得许可容易(easier to get forgiveness than permission,EGFP)”的函数,虽然更具有Python 的精神和风格,但在这种特殊的情况下,并不值得推荐,我还试过几个看上去更漂亮、更复杂和更迷惑人的方法,不过,除了更加难于解释和理解之外,它们无一例外地比那个朴实无华的list_get 函数慢。这里给出一个通用的准则:当你写 Python程序时,应当倾向于清晰和可读性,而不是紧凑和精炼–选择简单,而不是精巧。只要你坚持这么做,你常常会发现你的代码跑得更快,而且也更强健,更易于维护。在真实世界中,对于 99.9%的应用而言,遵循这个原则要比获得一点速度提升重要的多。

相关文章:

  • 机器学习之特征工程
  • 珠算与珠心算发展简介
  • c语言zixue
  • 并发编程面试题二
  • 从 root 一滴水看 Spring Data JPA 的汪洋大海
  • 前端面试笔试
  • 使用 Nginx 进行前端灰度发布的策略与实践
  • Day16:数组中出现次数超过一半的数字
  • harmonyOS NEXT开发与前端开发深度对比分析
  • C语言数据类型取值范围及格式化符号
  • NVMe集群:加速数据处理
  • 【C语言】自定义类型:结构体,联合,枚举(下)
  • python函数式编程
  • 【教程】继承中的访问控制 C++
  • C 语 言 --- 三 子 棋
  • 汽车保养记录用什么软件记录,汽车维修记录查询系统,佳易王汽车保养维护服务记录查询管理系统操作教程
  • 【免费】1949-2020年各省人均GDP数据
  • 2019年12月全国POI数据分享(同源历史POI分享系列)
  • Linux 蓝牙音频软件栈实现分析
  • 单引号与双引号在不同编程语言中的使用与支持
  • Meta一季度净利增长三成:上调全年资本支出,受关税影响亚洲出口电商广告支出减少
  • 国家网信办举办在欧中资企业座谈会,就数据跨境流动等进行交流
  • 十四届全国人大常委会举行第四十四次委员长会议
  • 制定出台民营经济促进法有何重大意义?全国人大常委会法工委回应
  • 科学家为AI模型设置“防火墙”,以防止被不法分子滥用
  • 财政部农业农村司司长吴奇修接受纪律审查和监察调查