当前位置: 首页 > ops >正文

Python 之实用函数enumerate()详解

enumerate() 是 Python 内置的一个实用函数,用于在遍历可迭代对象(如列表、元组、字符串等)时 同时获取元素的索引和值。它返回一个由 (索引, 值) 组成的元组序列,可显著简化需要索引的场景代码。

一、基本语法

enumerate(iterable, start=0)
  • iterable:要遍历的可迭代对象(如列表、字符串等)
  • start(可选):索引的起始值,默认从 0 开始

二、简单示例

fruits = ["apple", "banana", "cherry"]# 遍历时获取索引和值
for index, value in enumerate(fruits):print(f"索引: {index}, 值: {value}")# 输出:
# 索引: 0, 值: apple
# 索引: 1, 值: banana
# 索引: 2, 值: cherry

三、使用 start 参数 

# 让索引从 1 开始
for index, value in enumerate(fruits, start=1):print(f"位置: {index}, 水果: {value}")# 输出:
# 位置: 1, 水果: apple
# 位置: 2, 水果: banana
# 位置: 3, 水果: cherry

四、常见应用场景

  1. 修改列表元素时跟踪位置

    numbers = [10, 20, 30, 40]
    for idx, num in enumerate(numbers):numbers[idx] = num * 2  # 原地修改元素
    print(numbers)  # 输出: [20, 40, 60, 80]
  2. 生成带索引的输出

    for i, char in enumerate("Python"):print(f"字符 '{char}' 的索引是 {i}")
  3. 构建索引到值的映射字典

    words = ["hello", "world", "python"]
    index_map = {idx: word for idx, word in enumerate(words)}
    print(index_map)  # 输出: {0: 'hello', 1: 'world', 2: 'python'}

五、对比传统写法(更简洁!)

假设不用 enumerate(),传统写法需要手动管理索引:

# 传统写法(冗长且容易出错)
fruits = ["apple", "banana", "cherry"]
index = 0
for fruit in fruits:print(f"索引: {index}, 值: {fruit}")index += 1# 使用 enumerate() 更优雅
for index, fruit in enumerate(fruits):print(f"索引: {index}, 值: {fruit}")

六、注意事项

  • enumerate() 返回的是一个 迭代器对象,直接打印会显示内存地址,需遍历或转换为列表使用:
    print(enumerate(fruits))        # 输出: <enumerate object at 0x...>
    print(list(enumerate(fruits)))  # 输出: [(0, 'apple'), (1, 'banana'), (2, 'cherry')]
  • 如果只需要索引(不需要值),可以用 range(len(iterable)),但 enumerate 更 Pythonic。

七、总结

enumerate() 是 Python 中的高效工具,能简洁地处理需要同时操作索引和值的场景,避免手动维护计数器,使代码更清晰且易维护。

http://www.xdnf.cn/news/8983.html

相关文章:

  • vue项目webpack、vite、rollup、parcel四种构建工具对比
  • HarmonyOS NEXT~鸿蒙操作系统功耗优化特性深度解析
  • STM32F4学习第一天——keil软件安装
  • VS Code新手基础教程
  • TripGenie:畅游济南旅行规划助手:个人工作纪实(二十)
  • yolov8,c++案例汇总
  • 【身份证识别表格】把大量手机拍摄的身份证信息转换成EXCEL表格的数据,拍的身份证照片转成excel表格保存,基于WPF和腾讯OCR的实现方案
  • 微服务(SpringCloud)的简单介绍
  • AI时代新词-机器学习即服务(MLaaS)
  • 蜂鸟E203与PicoRV32两款RISC-V处理器的对比分析
  • 【Pandas】pandas DataFrame add_prefix
  • Node.js Path模块路径处理秘籍
  • 本地项目如何设置https(2)——2025-05-19
  • 2025.05.25-得物春招机考真题解析-第一题
  • geo ai库本地运行测试的坑
  • 战略3.1 - 战略选择(发展战略-一体/密集/多元化)
  • Swagger | 解决Springboot2.x/3.x不兼容和依赖报错等问题
  • 互联网大厂Java求职面试:AI与大模型应用集成中的架构难题与解决方案-1
  • Rust 学习笔记:闭包
  • RISC-V 开发板 MUSE Pi Pro cpufp测试算力
  • UE5 C++动态调用函数方法、按键输入绑定 ,地址前加修饰符
  • Vue 3.0 中状态管理Vuex 与 Pinia 的区别
  • 游戏:元梦之星游戏开发代码(谢苏)
  • Linux(Centos 7.6)命令详解:tar
  • Python3.11.9 绿色版安装配置教程
  • YOLO系列各版本的优缺点分析
  • 物流配送优化实战:用遗传算法破解选址难题
  • Android Studio 介绍
  • 软考 系统架构设计师系列知识点之杂项集萃(74)
  • NFT数字藏品交易是买卖合同还是著作权许可?