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

1Panel 安装与使用全指南:从部署到实战运维

1Panel 安装与使用全指南:从部署到实战运维

1Panel 安装与使用全指南:从部署到实战运维 1Panel 作为一款开源、现代化的 Linux 服务器运维管理面板,凭借容器化架构、简洁界面和丰富功能,成为替代传统面板的优选工具。本文将从安装准备、部署步骤、功能使用到进阶技巧,全方位带你掌握 1Panel 的实战运维能力。 一、1Panel 简介:为什么选择它? 1Panel 基于 Go 语言开发,采用 Docker 容器化技术,实现了服务器管理的「轻量化、低侵入、高安全」。核心优势包括: * 可视化运维:通过 Web 界面管理服务器资源、应用部署、域名 SSL 等,无需复杂命令; * 容器化隔离:所有应用运行在 Docker 容器中,避免环境冲突,降低运维风险; * 丰富生态:内置

By Ne0inhk
[特殊字符]颠覆MCP!Open WebUI新技术mcpo横空出世!支持ollama!轻松支持各种MCP Server!Cline+Claude3.7轻松开发论文检索MCP Server!

[特殊字符]颠覆MCP!Open WebUI新技术mcpo横空出世!支持ollama!轻松支持各种MCP Server!Cline+Claude3.7轻松开发论文检索MCP Server!

🔥🔥🔥本篇笔记所对应的视频:🚀颠覆MCP!Open WebUI新技术mcpo横空出世!支持ollama!轻松支持各种MCP Server!Cline+Claude3.7轻松开发MCP服务_哔哩哔哩_bilibili Open WebUI 的 MCPo 项目:将 MCP 工具无缝集成到 OpenAPI 的创新解决方案 随着人工智能工具和模型的快速发展,如何高效、安全地将这些工具集成到标准化的 API 接口中成为了开发者面临的重要挑战。Open WebUI 的 MCPo 项目(Model Context Protocol-to-OpenAPI Proxy Server)正是为了解决这一问题而设计的。本文将带您深入了解 MCPo 的功能、优势及其对开发者生态的影响。 什么是 MCPo? MCPo 是一个简单、可靠的代理服务器,能够将任何基于 MCP 协议的工具转换为兼容

By Ne0inhk
Qwen3+Qwen Agent 智能体开发实战,打开大模型MCP工具新方式!(一)

Qwen3+Qwen Agent 智能体开发实战,打开大模型MCP工具新方式!(一)

系列文章目录 一、Qwen3+Qwen Agent 智能体开发实战,打开大模型MCP工具新方式!(一) 二、Qwen3+Qwen Agent +MCP智能体开发实战(二)—10分钟打造"MiniManus" 前言 要说最近人工智能界最火热的开源大模型,必定是阿里发布不久的Qwen3系列模型。Qwen3模型凭借赶超DeepSeek-V3/R1的优异性能,创新的混合推理模式,以及极强的MCP能力迅速成为AI Agent开发的主流基座模型。大家可参考我的文章一文解析Qwen3大模型详细了解Qwen3模型的核心能力。有读者私信我: “Qwen3官网特地强调增强了Agent和代码能力,同时加强了对MCP的支持,那么我该如何利用Qwen3快速开发MCP应用呢?” 这就就需要使用我们今天的主角——Qwen官方推荐的开发工具Qwen-Agent ,本期分享我们就一起学习快速使用Qwen3+QwenAgent 接入MCP服务端,快速开发AI Agent应用! 一、注册 Qwen3 API-Key 本次分享通过阿里云百炼大模型服务平台API Key请求方式调用Qwen3大模型,获取服务平台

By Ne0inhk