python中enumerate()函数的使用

enumerate() 是 Python 中遍历列表(或可迭代对象)并同时获取「索引+元素」 的内置函数,核心作用是避免手动维护索引变量(如 i = 0; for x in list: ...; i +=1),让代码更简洁高效。

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

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

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

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

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

三、进阶用法

1. 遍历列表时修改元素(需注意:不能直接改迭代对象,要通过索引改原列表)
nums =[1,2,3,4]# 遍历索引和元素,将每个元素翻倍for idx, num inenumerate(nums): nums[idx]= num *2# 通过索引修改原列表print("修改后的列表:", nums)# 输出:[2, 4, 6, 8]
2. 结合条件筛选(按索引/元素过滤)
fruits =["苹果","香蕉","橙子","葡萄","芒果"]# 筛选出索引为偶数的元素(0、2、4)for idx, fruit inenumerate(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 inenumerate(matrix):for col_idx, val inenumerate(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 inenumerate(fruits, start=100):print(f"显示索引 {idx},实际列表索引 {idx-100}:{fruit}")

输出:

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

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

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

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

五、总结

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

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

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

Read more

【python】使用百度飞桨PaddleOCR进行本地文字识别

【python】使用百度飞桨PaddleOCR进行本地文字识别

【python】使用百度飞桨PaddleOCR进行本地文字识别 * 1 前言 * 2 百度飞桨框架 PaddlePaddle * 2.1 理论 * 框架图 * 文档 * CUDA 11、12区别 * 2.2 操作 * 查看 CUDA 版本 * 更新、下载 CUDA版本 * 安装 PaddlePaddle * CPU端安装 * GPU端安装 * 安装后验证 * 卸载 PaddlePaddle * 3 百度飞桨 PaddleOCR【版本3.xx】 * 3.1 理论 * 3.1.1 飞桨OCR、PP-OCRv5 * 3.1.2 文档 * 3.1.

By Ne0inhk

Python pip 全面讲解教程(2026 实用版)

pip 是 Python 官方的包管理工具,用于安装、卸载、更新、管理 Python 第三方包(如 requests、numpy、pandas 等),是 Python 开发的必备工具。本教程涵盖 pip 核心用法、环境适配、避坑技巧,适配 Windows/macOS/Linux 系统。 一、pip 基础认知 1. 什么是 pip? pip 全称 “Pip Installs Packages”,是 Python 生态的核心包管理工具,可: * 安装/卸载/更新 Python 第三方包; * 管理包的版本和依赖; * 导出/

By Ne0inhk
YOLOv8【第十一章:视频追踪与流处理篇·第2节】卡尔曼滤波(Kalman Filter)数学原理及其在追踪中的 Python 实现!

YOLOv8【第十一章:视频追踪与流处理篇·第2节】卡尔曼滤波(Kalman Filter)数学原理及其在追踪中的 Python 实现!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。 部分章节也会结合国内外前沿论文与 AIGC 等大模型技术,对主流改进方案进行重构与再设计,内容更偏实战与可落地,适合有工程需求的同学深入学习与对标优化。 ✨特惠福利:当前限时活动一折秒杀,一次订阅,终身有效,后续所有更新章节全部免费解锁,👉 点此查看详情 🎯 本文定位:计算机视觉 × 视频追踪与流处理系列 📅 更新时间:2026年 🏷️ 难度等级:⭐⭐⭐⭐⭐(高级进阶) 🔧 技术栈:Python 3.9+ · PyTorch

By Ne0inhk
在线浏览“秀人网合集”的新思路:30 行 Python 把封面图链接秒变本地可点图库

在线浏览“秀人网合集”的新思路:30 行 Python 把封面图链接秒变本地可点图库

用 30 行 Python 把秀人网公开合集“搬”进本地数据库 “秀人网”近日上线的新主题合集页采用前端渲染,数据通过 /api/v2/theme/list 接口一次性返回 JSON,无需模拟点击“加载更多”。接口无登录限制,但带 5 秒滑动窗口的 IP 频次校验:单 IP >30 次/分即返回 429。本文示范如何遵守 robots 协议、放缓速率,仅采集“公开可见”字段,并给出断点续抓、User-Agent 随机化、异常重试等常用技巧。 核心思路三步走: 分析列表接口:在浏览器 DevTools 里筛选 XHR,发现真实请求 URL

By Ne0inhk