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

Python zip() 函数详解

Python zip()函数详解zip()是Python内置函数用于将多个可迭代对象打包成元组组成的迭代器。它接收任意数量的可迭代对象作为参数返回一个元组迭代器每个元组包含来自各可迭代对象的对应位置元素。主要特点包括默认以最短的可迭代对象为准可通过itertools.zip_longest()处理不同长度的情况。常见应用场景包括创建字典、并行遍历多个列表、矩阵转置等。zip()具有高效的内存使用惰性求值但需要注意zip对象只能使用一次且不同长度时会丢失数据。与enumerate()相比zip()更适合处理多个序列的并行操作。掌握zip()可以编写更简洁高效的Python代码。Pythonzip()函数详解zip()是 Python 的内置函数用于将多个可迭代对象打包成元组组成的迭代器。1. 基本语法pythonzip(*iterables)参数*iterables一个或多个可迭代对象列表、元组、字符串等返回值返回一个元组迭代器每个元组包含来自每个可迭代对象的对应位置元素2. 基本用法打包两个列表pythonnames [Alice, Bob, Charlie] scores [85, 92, 78] result zip(names, scores) print(result) # zip object at 0x... print(list(result)) # [(Alice, 85), (Bob, 92), (Charlie, 78)]打包三个列表pythonnames [Alice, Bob, Charlie] ages [25, 30, 35] scores [85, 92, 78] result list(zip(names, ages, scores)) print(result) # [(Alice, 25, 85), (Bob, 30, 92), (Charlie, 35, 78)]打包字符串pythonword1 abc word2 123 result list(zip(word1, word2)) print(result) # [(a, 1), (b, 2), (c, 3)]3. 处理不同长度的可迭代对象默认行为以最短的为准pythonnames [Alice, Bob, Charlie, David] scores [85, 92] result list(zip(names, scores)) print(result) # [(Alice, 85), (Bob, 92)] # Charlie和David被忽略使用itertools.zip_longest()以最长的为准pythonfrom itertools import zip_longest names [Alice, Bob, Charlie, David] scores [85, 92] result list(zip_longest(names, scores)) print(result) # [(Alice, 85), (Bob, 92), (Charlie, None), (David, None)] # 指定填充值 result list(zip_longest(names, scores, fillvalue0)) print(result) # [(Alice, 85), (Bob, 92), (Charlie, 0), (David, 0)]4. 常见应用场景场景1创建字典pythonkeys [name, age, city] values [Alice, 25, Beijing] # 使用 zip 创建字典 dictionary dict(zip(keys, values)) print(dictionary) # {name: Alice, age: 25, city: Beijing}场景2并行遍历多个列表pythonnames [Alice, Bob, Charlie] ages [25, 30, 35] cities [Beijing, Shanghai, Guangzhou] for name, age, city in zip(names, ages, cities): print(f{name} is {age} years old and lives in {city}) # 输出 # Alice is 25 years old and lives in Beijing # Bob is 30 years old and lives in Shanghai # Charlie is 35 years old and lives in Guangzhou场景3矩阵转置python# 原始矩阵 matrix [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] # 转置 transposed list(zip(*matrix)) print(transposed) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)] # 如果需要列表而不是元组 transposed [list(row) for row in zip(*matrix)] print(transposed) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]场景4拆解列表解压python# 压缩 pairs [(Alice, 85), (Bob, 92), (Charlie, 78)] names, scores zip(*pairs) print(names) # (Alice, Bob, Charlie) print(scores) # (85, 92, 78)场景5同时遍历字典的键和值python# 方法1直接使用 items() d {a: 1, b: 2, c: 3} for key, value in d.items(): print(f{key}: {value}) # 方法2使用 zip不推荐但可行 for key, value in zip(d.keys(), d.values()): print(f{key}: {value})5. 实际应用示例示例1计算学生总分pythonstudents [Alice, Bob, Charlie] scores_math [85, 92, 78] scores_english [88, 85, 90] scores_python [95, 88, 92] for student, math, eng, py in zip(students, scores_math, scores_english, scores_python): total math eng py print(f{student}: 总分 {total}) # 输出 # Alice: 总分 268 # Bob: 总分 265 # Charlie: 总分 260示例2格式化输出表格pythonheaders [Name, Age, City] data [ [Alice, 25, Beijing], [Bob, 30, Shanghai], [Charlie, 35, Guangzhou] ] # 打印表头 print(f{headers[0]:10} {headers[1]:6} {headers[2]:10}) print(- * 28) # 打印数据 for row in data: print(f{row[0]:10} {row[1]:6} {row[2]:10}) # 或使用 zip 转置 for row in zip(*data): print(f{row[0]:10} {row[1]:6} {row[2]:10})示例3比较两个列表的差异pythonlist1 [1, 2, 3, 4, 5] list2 [1, 2, 0, 4, 6] for a, b in zip(list1, list2): if a ! b: print(f差异: {a} vs {b}) # 输出 # 差异: 3 vs 0 # 差异: 5 vs 6示例4添加索引pythonnames [Alice, Bob, Charlie] # 使用 enumerate 更合适但 zip 也可以 for i, name in zip(range(len(names)), names): print(f{i}: {name}) # 更好的方式 for i, name in enumerate(names): print(f{i}: {name})示例5处理多个列表的筛选pythonnames [Alice, Bob, Charlie, David] ages [25, 30, 35, 40] scores [85, 92, 78, 88] # 找出成绩大于80的学生 filtered [(name, age, score) for name, age, score in zip(names, ages, scores) if score 80] print(filtered) # [(Alice, 25, 85), (Bob, 30, 92), (David, 40, 88)]6.zip()的高级用法使用*解包操作符python# 解包列表 data [(a, 1), (b, 2), (c, 3)] letters, numbers zip(*data) print(letters) # (a, b, c) print(numbers) # (1, 2, 3) # 解包嵌套列表 matrix [[1, 2, 3], [4, 5, 6], [7, 8, 9]] transposed list(zip(*matrix))与sorted()结合使用pythonnames [Charlie, Alice, Bob] scores [78, 85, 92] # 按分数排序 sorted_pairs sorted(zip(scores, names)) print(sorted_pairs) # [(78, Charlie), (85, Alice), (92, Bob)] # 按分数排序后只取名字 sorted_names [name for score, name in sorted(zip(scores, names))] print(sorted_names) # [Charlie, Alice, Bob]7. 性能对比pythonimport time # 方法1使用索引 list1 list(range(10000)) list2 list(range(10000)) start time.time() result [(list1[i], list2[i]) for i in range(len(list1))] print(f索引方式: {time.time() - start:.5f}秒) # 方法2使用 zip start time.time() result list(zip(list1, list2)) print(fzip方式: {time.time() - start:.5f}秒) # zip 通常更快且更 Pythonic8. 注意事项和常见陷阱陷阱1zip 只能使用一次pythonnames [Alice, Bob, Charlie] scores [85, 92, 78] zipped zip(names, scores) print(list(zipped)) # [(Alice, 85), (Bob, 92), (Charlie, 78)] print(list(zipped)) # [] 第二次为空陷阱2不同长度时的数据丢失pythonnames [Alice, Bob, Charlie, David] scores [85, 92] result dict(zip(names, scores)) print(result) # {Alice: 85, Bob: 92} # Charlie 和 David 丢失陷阱3空可迭代对象pythonresult list(zip([], [1, 2, 3])) print(result) # [] 空列表9. 与其他函数对比函数功能返回值适用场景zip()并行打包元组迭代器多个序列并行处理map()应用函数迭代器对序列应用函数enumerate()添加索引索引-值对需要索引的遍历python# zip vs enumerate names [Alice, Bob, Charlie] # zip 方式 for i, name in zip(range(len(names)), names): print(i, name) # enumerate 方式更优 for i, name in enumerate(names): print(i, name)10. 实用技巧汇总python# 1. 创建字典 d dict(zip([a, b, c], [1, 2, 3])) # 2. 并行循环 for a, b in zip(list_a, list_b): pass # 3. 矩阵转置 transposed list(zip(*matrix)) # 4. 拆分成两个列表 list1, list2 zip(*list_of_pairs) # 5. 添加默认值使用 zip_longest from itertools import zip_longest pairs list(zip_longest(list1, list2, fillvalue0)) # 6. 生成相邻元素对 lst [1, 2, 3, 4, 5] pairs list(zip(lst, lst[1:])) # [(1,2), (2,3), (3,4), (4,5)] # 7. 生成偏移对 offset 2 offset_pairs list(zip(lst, lst[offset:])) # [(1,3), (2,4), (3,5)]总结表特性说明类型内置函数返回值zip 对象迭代器参数多个可迭代对象长度处理以最短的为准主要用途并行打包、解包、字典创建内存效率高惰性求值Pythonic✅ 非常 Pythonic最佳实践✅ 使用zip()进行并行遍历✅ 使用dict(zip(keys, values))创建字典✅ 使用zip(*matrix)进行矩阵转置✅ 结合列表推导式进行筛选⚠️ 注意不同长度的可迭代对象⚠️ zip 对象只能使用一次 需要填充值时使用itertools.zip_longest()zip()是 Python 中最实用的函数之一掌握它可以编写更简洁、更高效的代码

相关文章:

Python zip() 函数详解

Python zip()函数详解zip()是Python内置函数,用于将多个可迭代对象打包成元组组成的迭代器。它接收任意数量的可迭代对象作为参数,返回一个元组迭代器,每个元组包含来自各可迭代对象的对应位置元素。主要特点包括:默认以最短的可迭…...

Unity URP项目里灯光一闪一闪?别慌,5分钟教你搞定Per Object Limit设置

Unity URP项目灯光闪烁终极解决方案:深入理解Per Object Limit机制 最近在Unity URP项目中调试灯光效果时,你是否遇到过这样的场景:精心布置的多个点光源在运行时却像夜店灯光一样闪烁不定?这可不是什么酷炫特效,而是…...

C语言循环

C语言的循环while、for、do…while… 1、while循环 while(表达式) { 语句; } 先判断表达式,为真时执行while里面的语句,执行大括号中的语句之后,再次回到while处的表达式判断其是否为真,如果为真则继续向下执行&#x…...

XHS-Downloader:小红书内容管理解决方案,3种方式高效采集无水印素材

XHS-Downloader:小红书内容管理解决方案,3种方式高效采集无水印素材 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜…...

任务悬赏系统开发地推拉新小程序分销接单赏金提现app源码搭建广告联盟对接信息发布平台

盈利模式用户发布任务缴纳服务费;用户加入会员;用户提现缴纳手续费;可外接任务由平台管理员在后台发布,雇主给钱平台,用户为了获得佣金完成了任务,通过这样的形式赚取中间差价;成为流量主&#…...

国民技术 N32G003F5Q7 QFN-20-EP 单片机

特性内核CPU:32位ARM Cortex-M0内核,单周期硬件乘法指令,最高主频48MHz存储器:高达29.5KByte片内Flash,10万次擦写次数,10年数据保持;3KByte片内SRAM功耗模式:Run模式:所…...

3步实现跨平台词库自由:imewlconverter输入法词库转换终极指南

3步实现跨平台词库自由:imewlconverter输入法词库转换终极指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 你是否曾在Windows上精心调教的搜狗拼音词…...

7步快速掌握ComfyUI视频合成:从新手到高手的完整指南

7步快速掌握ComfyUI视频合成:从新手到高手的完整指南 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 你是否曾经面对一堆AI生成的静态图像&#xff0c…...

如何用G-Helper修复华硕ROG笔记本屏幕色彩异常问题

如何用G-Helper修复华硕ROG笔记本屏幕色彩异常问题 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, and other …...

Windows Cleaner:高效解决C盘爆红的最佳实践指南

Windows Cleaner:高效解决C盘爆红的最佳实践指南 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为C盘空间不足而烦恼吗?每次看到红色…...

AIGlasses OS Pro 智能视觉系统Mathtype公式识别:辅助数学文档数字化

AIGlasses OS Pro 智能视觉系统Mathtype公式识别:辅助数学文档数字化 每次整理数学试卷或者科研论文的电子版,最头疼的是什么?对我来说,就是那些用Mathtype、Word公式编辑器生成的公式图片。想把它们变成可编辑的LaTeX代码&#…...

4.2阿里云 OSS访问日志可以记录每一次的访问记录

研究了一下,可以不建立数据库、不用服务器、不用写后端代码,完全靠 阿里云 OSS 本身自带的访问日志功能 就能记录每一次访问,包括:谁在什么时候打开页面、下载了录音、IP 地址、UA 信息、请求路径等全部都有。可以不用改之前的验证…...

百万级长连接音频网关:Java WebFlux 在分布式系统中的工程化实践

百万级长连接音频网关:Java WebFlux 在分布式系统中的工程化实践 这不是一篇“WebFlux WebSocket 快速入门”,而是一篇面向生产系统的长连接网关设计说明。我们要回答的核心问题是:当业务进入语音房、实时通话、在线陪练、语音助手这类高并发低延迟场景时,如何用 Java 在分…...

GEO Monitor Toolkit:让你知道 AI 模型在背后怎么评价你

本文基于真实仓库内容写成。 所有功能、命令、指标、案例均来自 geo-monitor-toolkit 与 geo-monitor-os-skill 的实际文档,不是臆造。 一、一个大多数团队从未问过自己的问题 你的产品在 ChatGPT 里是什么形象? 不是"有没有被提到"这种粗糙…...

RWKV7-1.5B-G1A Java开发实战:集成SpringBoot构建智能微服务

RWKV7-1.5B-G1A Java开发实战:集成SpringBoot构建智能微服务 1. 为什么Java开发者需要关注RWKV7 最近在AI圈子里,RWKV7-1.5B-G1A这个模型引起了不小的轰动。作为一个Java开发者,你可能会问:这和我的日常工作有什么关系&#xff…...

【Java】继承:从入门到JVM底层,一篇搞定

【Java】继承——语言根基(三)继承:从入门到JVM底层,一篇搞定一、继承到底在表达什么?1.1 is-a关系1.2 什么时候别用继承?二、语法速览三、底层原理:new一个子类对象,内存里发生了什…...

lora-scripts企业级应用:客服话术、营销文案定制训练实战解析

LoRA-Scripts企业级应用:客服话术、营销文案定制训练实战解析 1. 为什么企业需要定制化文本生成 在当今商业环境中,个性化沟通已成为品牌差异化的关键。传统客服话术和营销文案往往面临三大痛点: 模板化严重:千篇一律的回复难以…...

AI MV制作平台选型指南

本指南针对Suno生成歌曲后的MV制作需求,按 workflow 效率分类选型,核心解决多工具拼接返工多的痛点。1. AI MV制作平台核心分类 Suno出歌后,主流生产路径对应3类平台,差异核心在流程效率而非生成能力:平台类型核心特征…...

C语言中将数字转换为字符串的方法

好的,我现在需要回答用户关于如何在C语言中将数学转换为字符串的问题。首先,我得理解用户的需求。可能他们是指将数值类型的数据转换成字符串形式,比如整数或浮点数转换为字符数组,或者是更复杂的数学表达式转换为字符串表示。根据…...

LLM工程化实践——RAG基础入门(一)

大模型 RAG 系统基础入门1. RAG 是什么?RAG Retrieval-Augmented Generation检索增强生成:先从外部知识库检索相关信息,再送给大模型生成答案。解决 LLM 三大问题:知识过时、幻觉、隐私数据不可访问。2. 核心基础概念LLM&#xf…...

Windows Cleaner终极方案:一键解决C盘爆红难题的智能清理工具

Windows Cleaner终极方案:一键解决C盘爆红难题的智能清理工具 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否曾因C盘突然变红而焦虑&#xff1…...

26-4-17 数据结构作业:用栈解决迷宫问题

1.问题描述 已知一个 66 的迷宫,可将其视作在一个坐标系中,令起点 (1,1),终点 (4,4),墙:1、路:0,要求用队列实现最短路径搜索。 2.算法思路 题目要求使用队列(先进先出&#xff09…...

基于深度学习的马铃薯病虫害识别和防治系统,resnet50,vgg16,resnet34【pytorch框架,python代码,模型融合】

更多图像分类、图像识别、目标检测、图像分割,图像检索等项目可从主页查看 功能演示(要看shi pin下面的简介): 土豆病虫害识别和防治系统resnet50,vgg16,resnet34卷积神经网络【pytorch框架,python代码,模…...

深度解析虚幻引擎Pak文件:5个实战技巧掌握UnrealPakViewer高效使用

深度解析虚幻引擎Pak文件:5个实战技巧掌握UnrealPakViewer高效使用 【免费下载链接】UnrealPakViewer 查看 UE4 Pak 文件的图形化工具,支持 UE4 pak/ucas 文件 项目地址: https://gitcode.com/gh_mirrors/un/UnrealPakViewer UnrealPakViewer是一…...

Mermaid Live Editor:免费在线图表编辑器的完整高效解决方案

Mermaid Live Editor:免费在线图表编辑器的完整高效解决方案 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-…...

SAM3效果实测:看看自然语言描述如何实现精准物体提取

SAM3效果实测:看看自然语言描述如何实现精准物体提取 1. 引言:从“画框”到“说话”的进化 过去,如果你想从一张照片里单独抠出某个物体,比如一只猫或者一辆车,通常需要借助专业的图像处理软件,用鼠标小心…...

OBS多平台直播终极指南:Multi RTMP插件完整教程

OBS多平台直播终极指南:Multi RTMP插件完整教程 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 想要实现真正的多平台同时直播,让您的直播内容一次性覆盖多个平台…...

基于「YOLO目标检测 + 多模态AI分析」的增材制造粉末床熔合缺陷智能检测分析预警系统

一、项目演示视频 b站演示视频与部署教程视频(点击这里) https://www.bilibili.com/video/BV1Ckd8BaEou/?share_sourcecopy_web&vd_source31c839f46a9a845dd6dd641cbd5c2ac1 二、技术栈 前端技术栈 (web-vue) 核心框架: Vue 3.5.13 (Composition API) UI组件库: Elemen…...

手把手教你用cv_unet_image-matting:零基础3秒完成人像抠图

手把手教你用cv_unet_image-matting:零基础3秒完成人像抠图 1. 工具介绍与核心价值 你是否遇到过这样的烦恼:需要快速抠出人像照片,但Photoshop操作太复杂?或者批量处理证件照时,手动抠图效率太低?今天我…...

Bitbucket代码仓库全流程指南:从创建到分支管理与忽略文件配置

1. Bitbucket项目创建与权限配置 第一次接触Bitbucket团队协作时,项目创建往往需要管理员权限。这里有个小技巧:如果你所在团队使用企业邮箱域(比如company.com),通常可以直接用公司邮箱申请项目创建权限。我遇到过不少…...