在 Python 中,zip() 是一个功能强大的内置函数,用于将多个可迭代对象中的元素按索引位置组合成元组,从而形成新的迭代器。它常用于配对、合并、并行遍历等操作,是处理多个数据序列的利器。
zip() 这个名字形象地说明了它的功能:把多个序列“咬合”在一起,像拉链(zipper)那样逐项配对。
一、函数语法
zip(iterable1, iterable2, ..., iterableN)参数:
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: 782、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: 753、解包(逆操作)
使用 * 运算符可以解包已 zip 的数据。
zipped = [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
names, ages = zip(*zipped)
print(names) # 输出: ('Alice', 'Bob', 'Charlie')
print(ages) # 输出: (25, 30, 35)*matrix 是解包操作符,表示将 matrix 中的每一项单独取出作为参数传入函数。
4、转置(tranpose)二维列表
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、想强制“等长配对”可以使用 itertools.zip_longest(),会填补较短列表的缺失值(需要引入标准库)。
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() 可与 enumerate() 配合使用。
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、在 Python 2 中,zip() 直接返回列表而非迭代器。
5、当处理大型数据集时,zip() 比手动索引更高效且更 Pythonic。
zip() 是 Python 中处理并行迭代的强大工具,可以使代码更简洁、更易读,特别适合需要同时处理多个相关数据序列的场景。
“点赞有美意,赞赏是鼓励”
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.