第10条:尽量用enumerate取代range
核心要点:
(1)enumerate函数提供了一种精简的写法,可以在遍历迭代器时获知每个元素的索引。
(2)尽量用enumerate来改写那种将range与下标访问相结合的序列遍历代码。
(3)可以给enumerate提供第二参数,以指定开始计数时所用的值(默认为0)
在一系列整数上面迭代时,内置的range函数很有用。
对于字符串列表这样的序列式结构,可以直接在上面迭代。
>>> name_list = ['kebi','maoxian','xiaoniao','xingye'] >>> for name in name_list: ... print("%s is very handsome" % name) ... kebi is very handsome #科比是最帅的 maoxian is very handsome #毛线是最帅的 xiaoniao is very handsome xingye is very handsome
当迭代列表的时候,通常还想知道当前元素在列表中的索引。
例如,要个每个人加上一个序号,就可以用range来实现。
>>> for i in range(len(name_list)): ... name = name_list[i] ... print('%d:%s' % (i+1,name)) ... 1:kebi 2:maoxian 3:xiaoniao 4:xingye
与单纯迭代name_list或是单纯使用range的代码相比,上面这段代码有些生硬。
我们必须获取列表长度,并且通过下标来访问数字,这种代码不便于理解。
python提供了内置函数enumerate(枚举)函数,以解决此问题。enumerate可以把各种迭代器包装为生成器,以便稍后产生输出值。
生成器每次产生一堆输出值,其中,前者表示循环下标,后者表示从迭代器中获取到的下一个元素。这样写出来的代码会非常的简洁。
>>> for i,name in enumerate(name_list,1): ... print('%d:%s'% (i,name)) ... 1:kebi 2:maoxian 3:xiaoniao 4:xingye
文章摘抄于Brett Slatkin的《编写高质量Python代码的59个有效方法》,仅作为个人学习使用,如有侵权请告知,将及时删除,如果觉得有益,请购买原版书籍,知识需要传递和支持,谢谢。
分类:
python高质量代码方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理