news 2026/9/7 21:19:39

Python 内置函数:zip()

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 内置函数:zip()

在, zip()是一个功能强大的内置函数, 它用于在多个可迭代对象里按索引位置把元素组合成元组, 进而形成新的迭代器。其常用于配对、合并、并行遍历等操作, 是处理多个数据序列的有效工具。

zip() 此名字栩栩如生地阐明了其功能所在, 即把多个序列予以“咬合”, 使其如同拉链按项进行配对那般 , 其功能就如同拉链按项配对那样 , 将多个序列“咬合”在一起。

一、函数语法

zip(iterable1, iterable2, ..., iterableN)

参数:

, 一个或者多个可继续迭代的对象, 像列表, 元组, 字符串或者range之内, 如果个数随意不限定, 然而最终结果之中仅仅保留最短可迭代对象长度相对应的那些元素。

返回值:

给出这么一个对象,它属于迭代器类别, 具体是zip类型, 其中每一元素, 皆为由传入诸个可迭代物内, 拥有相同索引数编号的成分所搭建起来的元组句号。

若要去查看全部的结果, 能够使用 list(), 或者 tuple(), 从而将其转变为列表或者元组。

二、基础用法示例

1、将两个列表打包成对

names = ['Alice', 'Bob', 'Charlie'] scores = [90, 85, 78] for name, score in zip(names, scores): print(f"{name}: {score}")

输出:

Alice: 90 Bob: 85 Charlie: 78

2、运行zip() , 它会返回zip 对象, 要查看结果, 就得将其转换为列表或者元组。

a = [1, 2, 3] b = ['a', 'b', 'c'] z = zip(a, b) print(list(z)) # 输出: [(1, 'a'), (2, 'b'), (3, 'c')]

3、多个可迭代对象

a = [1, 2, 3] b = ['a', 'b', 'c'] c = ['x', 'y', 'z'] print(list(zip(a, b, c))) # 输出:[(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')]

4、 长度不一致时,按最短截断

a = [1, 2, 3] b = ['a', 'b'] print(list(zip(a, b))) # 输出:[(1, 'a'), (2, 'b')] # 第 3 个元素被舍弃

三、典型应用场景

1、构建字典

keys = ['id', 'name', 'age'] values = [101, 'Alice', 18] person = dict(zip(keys, values)) print(person) # 输出:{'id': 101, 'name': 'Alice', 'age': 18}

2、并行遍历多个序列

students = ['Tom', 'Jerry', 'Spike'] scores = [88, 92, 75] for name, score in zip(students, scores): print(f"{name}: {score}")

输出:

Tom: 88 Jerry: 92 Spike: 75

3、解包(逆操作)

使用 * 运算符可以解包已 zip 的数据。

zipped = [('Alice', 25), ('Bob', 30), ('Charlie', 35)] names, ages = zip(*zipped) print(names) # 输出: ('Alice', 'Bob', 'Charlie') print(ages) # 输出: (25, 30, 35)

“*”, 这是解包操作符, 它发挥的作用是, 把其中的每一项, 都单独地取出来, 以此作为参数, 传入到函数之中。

4、转置()二维列表

matrix = [ [1, 2, 3], [4, 5, 6] ] transposed = list(zip(*matrix)) print(transposed) # 输出:列表的行列互换 # [(1, 4), (2, 5), (3, 6)]

四、补充说明

1、zip() 功能是, 返回那种惰性迭代器, 它不会马上就生成全部所得, 而是当进行遍历操作的时候,才会逐一去做计算, 这种情况是适宜用于大数据处理工作当中的。

即,zip() 返回的是迭代器,只能被消费一次。

zipped = zip(names, ages) list(zipped) # 第一次可以正常使用 list(zipped) # 第二次返回空列表

2、若想要进行强制的“等长配对”操作, 得以使用.( ),此操作会对较短列表的那些缺失值予以填补, 但这是需要引入标准库才行的。

from itertools import zip_longest a = [1, 2] b = ['a', 'b', 'c'] print(list(zip_longest(a, b, fillvalue='-'))) # 输出:[(1, 'a'), (2, 'b'), ('-', 'c')]

3、zip() 可与 () 配合使用。

names = ['Tom', 'Jerry', 'Spike'] scores = [88, 92, 75] for i, (n, s) in enumerate(zip(names, scores), start=1): print(f"第{i}位:{n}({s}分)")

4、在 2 中,zip() 直接返回列表而非迭代器。

5、处理大型数据集之际, zip() 相较手动索引, 效率更高, 且更具某种况味。

并行迭代处理当中,有个强大工具名叫zip(), 它能让代码更简洁, 也能让代码更易读, 在需要同时去处理多个相关数据流序列的场景里,它特别适用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 21:17:03

嵌入式调试:告别printf,掌握这些高级工具与日志设计思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 21:14:25

OpenDataLoader PDF解析实战:扫描件OCR与版面结构化的完整方案

做PDF解析这件事,最烦的不是“能不能识别”,而是“识别出来之后到底能不能用”。尤其是扫描件、拍照件、带复杂版面的合同和论文,很多工具号称能OCR,跑完一遍,文字是出来了,但顺序乱了、表格丢了、页码全混…

作者头像 李华
网站建设 2026/9/7 21:13:45

AI论文降重实战:从90%到10%的技术方案

1. 项目背景与核心挑战去年我在处理学术论文时发现一个棘手问题:使用AI辅助写作工具生成的初稿中,AI率检测结果高达90%。这个数字意味着我的论文可能面临学术诚信风险,特别是在知网等平台的查重系统中。经过三个月的研究和实践,我…

作者头像 李华
网站建设 2026/9/7 21:12:11

计算机单片机毕设实战-基于 STM32 或 51 单片机的 TDS 水质检测饮水提醒系统设计与实现 基于 STM32 或 51 单片机的恒温加热与水位监测智能装置设计(025306)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/9/7 21:09:07

TikTok爆款视频制作全流程:从内容策划到技术实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华