跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Python算法

Python 内置函数 enumerate() 用法详解

Python 内置函数 enumerate() 用于遍历可迭代对象并获取索引与元素,替代手动维护索引变量,使代码更简洁高效。支持自定义索引起始值,适用于列表遍历、元素修改、条件筛选及多维列表处理等场景。文章通过示例对比传统遍历方式,展示其优势,并指出常见误区,如混淆 start 参数作用或试图直接修改元组。掌握该函数能有效提升 Python 列表处理效率与可读性。

氛围发布于 2026/3/15更新于 2026/4/2716 浏览

一、基本用法:遍历索引 + 元素

语法
enumerate(iterable, start=0)
  • iterable:要遍历的可迭代对象(列表、元组、字符串等,常用列表);
  • start:索引的起始值(默认是 0,可自定义,如 start=1 从 1 开始计数);
  • 返回值:迭代器,每次迭代返回一个 (索引,元素) 的元组。
示例 1:默认索引从 0 开始
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
# 用 enumerate 遍历列表(默认 start=0)
for index, fruit in enumerate(fruits):
    print(f"索引 {index}:元素 {fruit}")
输出:
索引 0:元素 苹果
索引 1:元素 香蕉
索引 2:元素 橙子
索引 3:元素 葡萄
示例 2:自定义索引从 1 开始(start=1)
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
# 索引从 1 开始(适合场景:序号展示、排名等)
for index, fruit in enumerate(fruits, start=1):
    print(f"第 {index} 个水果:{fruit}")
输出:
第 1 个水果:苹果
第 2 个水果:香蕉
第 3 个水果:橙子
第 4 个水果:葡萄

二、核心优势:对比传统遍历(无 enumerate)

没有 enumerate() 时,要获取索引需手动维护变量,代码冗余且易出错:

fruits = ["苹果", "香蕉", "橙子", "葡萄"]
# 传统方式:手动维护索引 i
i = 0
for fruit in fruits:
    print(f"索引 {i}:元素 {fruit}")
    i += 1  # 必须手动递增,忘记写就会出错
  • 用 enumerate() 可直接省略 i 的定义和递增,代码更简洁、不易出错。

三、进阶用法

1. 遍历列表时修改元素(需注意:不能直接改迭代对象,要通过索引改原列表)
nums = [1, 2, 3, 4]
# 遍历索引和元素,将每个元素翻倍
for idx, num in enumerate(nums):
    nums[idx] = num * 2  # 通过索引修改原列表
print("修改后的列表:", nums)
# 输出:[2, 4, 6, 8]
2. 结合条件筛选(按索引/元素过滤)
fruits = ["苹果", "香蕉", "橙子", "葡萄", "芒果"]
# 筛选出索引为偶数的元素(0、2、4)
for idx, fruit in enumerate(fruits):
    if idx % 2 == 0:
        print(f"索引 {idx}(偶数):{fruit}")
输出:
索引 0(偶数):苹果
索引 2(偶数):橙子
索引 4(偶数):芒果
3. 与 list() 结合,直接生成「索引 - 元素」元组列表
fruits = ["苹果", "香蕉", "橙子"]
# 生成包含 (索引,元素) 的列表
indexed_fruits = list(enumerate(fruits, start=1))
print(indexed_fruits)
# 输出:[(1, '苹果'), (2, '香蕉'), (3, '橙子')]
4. 遍历多维列表(嵌套列表)
matrix = [[1, 2], [3, 4], [5, 6]]
# 遍历二维列表的「行索引 + 行内容 + 列索引 + 列元素」
for row_idx, row in enumerate(matrix):
    for col_idx, val in enumerate(row):
        print(f"行 {row_idx} 列 {col_idx}:{val}")
输出:
行 0 列 0:1
行 0 列 1:2
行 1 列 0:3
行 1 列 1:4
行 2 列 0:5
行 2 列 1:6

四、常见误区

混淆 start 参数的作用:
start 只改变索引的显示值,不改变列表的实际索引(原列表的索引仍从 0 开始):

fruits = ["苹果", "香蕉"]
for idx, fruit in enumerate(fruits, start=100):
    print(f"显示索引 {idx},实际列表索引 {idx-100}:{fruit}")

输出:

显示索引 100,实际列表索引 0:苹果
显示索引 101,实际列表索引 1:香蕉

试图直接修改迭代对象(错误):
enumerate() 返回的是元组 (idx, 元素),元组不可修改,若想改元素需通过原列表的索引:

nums = [1, 2, 3]
for idx, num in enumerate(nums):
    num = num * 2  # 错误:只修改了临时变量 num,原列表不变
print(nums)
# 输出:[1, 2, 3](无变化)

正确做法:nums[idx] = num * 2(通过索引修改原列表)。

五、总结

enumerate() 是列表遍历的「效率工具」,核心场景:

  • 需要同时获取元素和它的位置(索引);
  • 避免手动维护索引变量,简化代码;
  • 支持自定义索引起始值(如序号、排名等场景)。

记住核心用法:for idx, elem in enumerate(列表,start=起始值):,几乎能覆盖所有列表遍历需索引的场景!

目录

  1. 一、基本用法:遍历索引 + 元素
  2. 语法
  3. 示例 1:默认索引从 0 开始
  4. 用 enumerate 遍历列表(默认 start=0)
  5. 输出:
  6. 示例 2:自定义索引从 1 开始(start=1)
  7. 索引从 1 开始(适合场景:序号展示、排名等)
  8. 输出:
  9. 二、核心优势:对比传统遍历(无 enumerate)
  10. 传统方式:手动维护索引 i
  11. 三、进阶用法
  12. 1. 遍历列表时修改元素(需注意:不能直接改迭代对象,要通过索引改原列表)
  13. 遍历索引和元素,将每个元素翻倍
  14. 输出:[2, 4, 6, 8]
  15. 2. 结合条件筛选(按索引/元素过滤)
  16. 筛选出索引为偶数的元素(0、2、4)
  17. 输出:
  18. 3. 与 list() 结合,直接生成「索引 - 元素」元组列表
  19. 生成包含 (索引,元素) 的列表
  20. 输出:[(1, '苹果'), (2, '香蕉'), (3, '橙子')]
  21. 4. 遍历多维列表(嵌套列表)
  22. 遍历二维列表的「行索引 + 行内容 + 列索引 + 列元素」
  23. 输出:
  24. 四、常见误区
  25. 输出:[1, 2, 3](无变化)
  26. 五、总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 环境配置:Anaconda 安装与 Jupyter Notebook 使用指南
  • 2024 大模型典型示范应用案例集:行业赋能与智能体趋势分析
  • VSCode Copilot 接入 DeepSeek 模型配置指南
  • Python 进程池 ProcessPoolExecutor 使用指南
  • Python 培训费用参考及学习路径分析
  • Python Tkinter 窗体开发技术详解
  • ComfyUI 使用 LoRA 极简工作流
  • AI 绘画技术发展与职业变现路径解析
  • AI 辅助 FPGA 开发与 Vivado 配置实践
  • 前端数据可视化工具对比与选型指南
  • 基于 C++ 部署 ONNX 模型的低延迟高吞吐优化技巧
  • 各无人机厂家 RemoteID 支持情况汇总
  • 金仓数据库 Oracle 与 SQL Server 迁移兼容性对比及实操指南
  • MK SD NAND:无人机飞控日志存储方案
  • Windows 11 环境下通过命令行升级 Python 版本的方法
  • Java volatile 关键字解析:底层原理与最佳实践
  • SpringMVC 请求参数传递方式详解
  • Linux 基础 IO:深入理解软链接与硬链接
  • 算法实战:预处理、滑窗、前缀和哈希、DP 与并查集
  • Docker Compose 部署 OpenClaw 并接入飞书机器人

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online