核心概念
zip() 函数是Python标准库中的一个内置函数,主要用于将多个可迭代对象(如列表、元组)"压缩"在一起,形成一个迭代器。
每次迭代时,这个迭代器会返回一个包含每个输入可迭代对象中对应位置元素的元组。
🔗 压缩功能
将多个可迭代对象压缩成一个迭代器
🔄 并行迭代
同时遍历多个可迭代对象
⚡ 惰性求值
返回迭代器,支持惰性计算,节省内存
📏 长度匹配
以最短的可迭代对象长度为准
交互式演示
基本用法演示
点击下方按钮查看zip()函数的工作过程
列表 1 (list1)
1
2
3
列表 2 (list2)
'a'
'b'
'c'
列表 3 (list3)
1.1
2.2
3.3
结果 (zip 后的元组列表):
代码示例
示例 1: 基本用法
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
result = list(zip(list1, list2))
print(result)
# 输出: [(1, 'a'), (2, 'b'), (3, 'c')]
示例 2: 使用 for 循环遍历
for item1, item2 in zip(list1, list2):
print(f"{item1} -> {item2}")
# 输出:
# 1 -> a
# 2 -> b
# 3 -> c
示例 3: 拆包操作(转置矩阵)
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)]
工作原理
zip() 函数的工作原理可以这样理解:
- 接收多个可迭代对象作为参数
- 同时迭代这些可迭代对象,每次取每个对象的第i个元素
- 将这些元素组合成一个元组返回
- 当最短的可迭代对象耗尽时,停止迭代
💡 重要提示:
- zip() 返回的是迭代器,不是列表。需要使用 list() 转换或在循环中使用
- 当输入的可迭代对象长度不同时,以最短的为准
- zip() 是惰性求值的,不会立即创建所有结果,节省内存
- 可以使用
zip(*zipped)来解压(反向操作)
实际应用场景
1. 并行处理多个列表
# 同时遍历姓名和年龄列表
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name} is {age} years old")
2. 创建字典
keys = ['a', 'b', 'c']
values = [1, 2, 3]
my_dict = dict(zip(keys, values))
# 结果: {'a': 1, 'b': 2, 'c': 3}
3. 矩阵转置
data = [[1, 2], [3, 4], [5, 6]]
transposed = list(zip(*data))
# 结果: [(1, 3, 5), (2, 4, 6)]