目录
1. zip()函数概述
zip()是Python内置的一个极其有用的函数,它能够将多个可迭代对象"打包"成一个元组的迭代器,使得我们可以同时遍历多个序列。这种并行遍历的能力让代码更加简洁、优雅,同时提高了可读性和效率。
1.1 基本语法
zip(*iterables)
*iterables
:一个或多个可迭代对象(列表、元组、字符串、字典等)- 返回值:一个zip对象(迭代器),包含输入迭代器的元素组成的元组
1.2 基本用法示例
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
# 传统方式
for i in range(len(names)):
print(f"{
names[i]} is {
ages[i]} years old")
# 使用zip
for name, age in zip(names, ages):
print(f"{
name} is {
age} years old")
2. zip()的工作原理
2.1 函数内部机制
zip()函数创建一个迭代器,该迭代器聚合来自每个可迭代对象的元素。它会生成元组,直到最短的输入可迭代对象耗尽。
def my_zip(*iterables):
iterators = [iter(it) for it in iterables]
while True:
try:
yield tuple(next(it) for it in iterators)
except StopIteration:
break
2.2 返回值类型
numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
zipped = zip(numbers, letters)
print(type(zipped)) # <class 'zip'>
print(list(zipped)) # [(1, 'a'), (2, 'b'), (3, 'c')]
3. 核心应用场景
3.1 基本并行遍历
# 遍历两个列表
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
for num, char in zip(list1, list2):
print(f"Number: {
num}, Character: {
char}")
3.2 处理不同长度的迭代对象
# 最短匹配原则
numbers = [1, 2, 3, 4, 5]
letters = ['a', 'b', 'c']
for n, l in zip(numbers, letters):
print(n, l)
# 输出:
# 1 a
# 2 b
# 3 c
3.3 与enumerate结合使用
# 同时获取索引和多个序列的值
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
for idx, (name, age) in enumerate(zip(names, ages)):
print(f"{
idx}: {
name} is {
age} years old")
3.4 字典操作
# 使用zip创建字典
keys = ['name', 'age', 'gender']
values = ['Alice', 25, 'Female']
person = dict