enumerate函数本质是给可迭代对象加编号,返回枚举迭代器,每次生成(索引,元素)元组;支持start参数自定义起始值,常用于列表/字典推导式,但返回对象不可重复遍历、不可切片且不修改原数据。

Python 的 enumerate 函数本质是给可迭代对象“加编号”,它不改变原数据,而是返回一个枚举对象(iterator),每次生成一个包含索引和对应元素的元组。掌握它,能少写很多带计数器的循环,代码更清晰、更 Pythonic。
enumerate 的基本用法和返回值
enumerate 接收一个可迭代对象(如列表、字符串、元组),默认从 0 开始编号,返回一个枚举器。它本身不直接显示内容,需要配合 for 循环或 list() 查看:
-
for i, item in enumerate(['a', 'b', 'c']): print(i, item)→ 输出0 a、1 b、2 c -
list(enumerate('xy'))→ 返回[(0, 'x'), (1, 'y')]
自定义起始索引:start 参数很实用
经常需要从 1 开始编号(比如打印带序号的菜单),这时用 start 参数比手动 i+1 更安全直观:
-
for i, name in enumerate(['Tom', 'Jerry'], start=1): print(f'{i}. {name}')→ 输出1. Tom、2. Jerry -
start可以是任意整数,包括负数(如start=-2)
和列表推导式/字典推导式搭配很高效
想快速生成带索引的结构?不用先建空列表再 append,一行就能搞定:
TURF(开源)权限定制管理系统(以下简称“TURF系统”),是蓝水工作室推出的一套基于软件边界设计理念研发的具有可定制性的权限管理系统。TURF系统充分考虑了易用性,将配置、设定等操作进行了图形化设计,完全在web界面实现,程序员只需在所要控制的程序中简单调用一个函数,即可实现严格的程序权限管控,管控力度除可达到文件级别外,还可达到代码级别,即可精确控制到
立即学习“Python免费学习笔记(深入)”;
- 生成索引-值对的列表:
[(i, x) for i, x in enumerate(['apple', 'banana'])] - 生成反向映射字典(值 → 索引):
{x: i for i, x in enumerate(['red', 'green', 'blue'])}→{'red': 0, 'green': 1, 'blue': 2}
常见误区和注意事项
初学者容易忽略的几个点:
-
enumerate返回的是迭代器,只能遍历一次;重复使用需重新调用 - 别误以为它修改原列表——它只是“包装”了一层,原数据完全不变
- 不能直接对
enumerate对象做切片(如enum[1:]),要先转成list或用itertools.islice - 如果只需要索引或只需要值,仍建议用
enumerate解包,而不是range(len(...)),后者在大对象上效率低且不够语义化









