Python的枚举enumerate学习

server/2025/3/6 5:58:44/

这个enumerate可以说是非常常用和强大的一个东西,值得单独盘点学习复习一下。

关键语法拆解

python">for i, (doc, meta, doc_id) in enumerate(zip(docs, metas, ids)):# 处理每个元素的代码
1️⃣ zip(docs, metas, ids)
  • 功能:将3个列表逐元素打包成元组
  • 示例
    python">docs   = ["doc1", "doc2"]
    metas  = [{"source": "pdf"}, {"source": "code"}]
    ids    = ["id1", "id2"]list(zip(docs, metas, ids)) 
    # 输出: [('doc1', {'source': 'pdf'}, 'id1'), 
    #        ('doc2', {'source': 'code'}, 'id2')]
    
2️⃣ enumerate(...)
  • 功能:为每个打包后的元组添加索引
  • 示例
    python">list(enumerate(["a", "b"])) 
    # 输出:[(0, 'a'), (1, 'b')]list(enumerate(zip(docs, metas, ids))) 
    # 输出:[(0, ('doc1', {'source': 'pdf'}, 'id1')),
    #        (1, ('doc2', {'source': 'code'}, 'id2'))]
    
3️⃣ i, (doc, meta, doc_id)
  • 功能:解包索引和元组
  • 解包过程示意
    python"># 原始数据格式
    (0, ('doc1', {'source': 'pdf'}, 'id1'))# 拆分为:
    i = 0
    doc = 'doc1'
    meta = {'source': 'pdf'}
    doc_id = 'id1'
    

设计思想

  1. 同步遍历(Synchronized Iteration)
    ✅ 确保相关性强的多个数据集(文档内容、元数据、ID)保持顺序一致地处理

  2. 信息完备性
    ✅ 通过索引 i 额外提供顺序信息,方便调试和日志记录

  3. 最小化内存占用
    zipenumerate 按需生成数据,而不一次性加载到内存(类似生成器)


常见应用场景

1. 数据集检查(结合索引定位问题)
python">for idx, (text, label) in enumerate(zip(texts, labels)):if len(text) < 10: print(f"警告:第{idx}条文本过短 -> {text}")
2. 批量数据增强
python">augmented_images = []
for i, (img, bbox) in enumerate(zip(images, bboxes)):aug_img = random_crop(img)augmented_images.append(aug_img)print(f"已处理第{i}张图像")
3. 结构化日志输出
python">data = [{"name": "Alice", "age": 30},{"name": "Bob", "age": 25}
]for i, (user, metadata) in enumerate(zip(users, extra_info)):print(f"用户 {i+1}: {user['name']} | 附加信息: {metadata}")
4. 多列表对齐验证(重要!)
python"># 检查三个列表长度是否一致
assert len(docs) == len(metas) == len(ids)for i, (doc, meta, doc_id) in enumerate(zip(docs, metas, ids)):if not doc_id.startswith("pdf"):print(f"异常ID格式:索引 {i}, ID {doc_id}")

与纯索引遍历的对比

假设不用 enumerate(zip(...)),传统写法:

python">for i in range(len(docs)):doc = docs[i]meta = metas[i]doc_id = ids[i]# 处理...

优势对比:

方法优点缺点
enumerate(zip)代码简洁,自动处理多个列表各列表必须等长
索引遍历灵活控制,可处理不等长列表需要写更多索引操作,易错

高手技巧

1. 用 strict=True 强制列表等长(Python ≥3.10)
python">for i, (a, b) in enumerate(zip(list1, list2, strict=True)):# 如果 list1 和 list2 不等长,立即触发 ValueError
2. 处理不等长列表需求(itertools.zip_longest
python">from itertools import zip_longestfor i, (a, b) in enumerate(zip_longest(list1, list2, fillvalue="缺省值")):# 空缺位置自动填充 "缺省值"
3. 压缩多层数据(医学影像案例)

假设每个病例包含多个诊断维度的数据:

python"># 三维数据组织
patients = ["P001", "P002"]
images = [ ["scan1.png", "scan2.png"], ["scan3.png"] ]
diagnoses = [ [0.9, 0.1], [0.4] ]for p_idx, (pid, img_group, diag_group) in enumerate(zip(patients, images, diagnoses)):for s_idx, (img_path, diag_score) in enumerate(zip(img_group, diag_group)):print(f"患者{p_idx}{s_idx}次扫描:{img_path} → 诊断置信度 {diag_score}")

通过理解这种遍历模式的强大之处,已经可以游刃有余地处理现实项目中复杂的多数据流场景! 🚀


http://www.ppmy.cn/server/172802.html

相关文章

LC串联带初始值的时域表达式

LC串联&#xff0c;在t0时刻接入直流电压 U i n U_{in} Uin​。 电感电流 i ( t ) i(t) i(t)和电容电压 u c ( t ) u_c(t) uc​(t)的时域表达式可通过二阶微分方程求解。以下是推导过程与结果&#xff1a; 1. 微分方程建立 电感 L L L与电容 C C C串联&#xff0c;接入直流…

如何为 Power Automate 配置 Azure Key Vault 权限

前言 最近&#xff0c;在Power Automate中使用Azure Key Vault&#xff0c;然后&#xff0c;就需要配置一下AKV的权限。 正文 1.我们在Azure Portal里新建一个Key vault&#xff0c;如下图&#xff1a; 2.进入Access policies&#xff0c;点击Create&#xff0c;如下图&#xf…

网上花店微信小程序+论文源码调试讲解

第四章 系统设计 4.1 总体功能 网上花店微信小程序是根据需求定制开发&#xff0c;开发软件选用IDEA平台配合MySQL数据库进行开发环境的搭建操作&#xff0c;网站采用WEB应用程序中最流行的小程序结构进行开发&#xff0c;用户访问系统数据仅仅需要在客户端安装谷歌浏览器或者…

Hi3516CV610电瓶车检测 电动自行车检测 人脸检测 人形检测 车辆检测 宠物检测 包裹检测 源码

海思全线一代AI摄像机SoC&#xff0c;在板端实现实时AI检测&#xff0c;视频传输、视频录像、报警等功能 Hi3516CV610开发板实时AI检测效果演示&#xff0c;实时在板端完成 视频采集—AI检测—视频编码—网络传输&#xff0c;AI检测算法无需license无需授权&#xff0c;终身免…

SQL经典常用查询语句

1. 基础查询语句 1.1 查询表中所有数据 在SQL中&#xff0c;查询表中所有数据是最基本的操作之一。通过使用SELECT * FROM table_name;语句&#xff0c;可以获取指定表中的所有记录和列。例如&#xff0c;假设有一个名为employees的表&#xff0c;包含员工的基本信息&#xf…

任务9:交换机基础及配置

CSDN 原创主页&#xff1a;不羁https://blog.csdn.net/2303_76492156?typeblog 一、交换机基础 交换机的概念&#xff1a;交换机是一种网络设备&#xff0c;用于连接多台计算机或网络设备&#xff0c;实现数据包在局域网内的快速交换。交换机基于MAC地址来转发数据包&#x…

Airflow和PySPARK实现带多组参数和标签的Amazon Redshift数据仓库批量数据导出程序

设计一个基于多个带标签SQL模板作为配置文件和多组参数的PySPARK代码程序&#xff0c;实现根据不同的输入参数&#xff0c;用Airflow进行调度&#xff0c;自动批量地将Amazon Redshift数据仓库的数据导出为Parquet、CSV和Excel文件到S3上&#xff0c;标签和多个参数&#xff08…

密码学(哈希函数)

4.1 Hash函数与数据完整性 数据完整性&#xff1a; 检测传输消息&#xff08;加密或未加密&#xff09;的修改。 密码学Hash函数&#xff1a; 构建某些数据的简短“指纹”&#xff1b;如果数据被篡改&#xff0c;则该指纹&#xff08;以高概率&#xff09;不再有效。Hash函数…