在 Python 中,zip() 是一个内建函式,用于将多个可迭代对象(如列表、元组)中的元素配对起来,生成一个「配对」的迭代器。这样的迭代器中每个元素都是一个元组,包含来自原始序列的对应元素。zip() 可以大大简化多个序列间的同步操作,比如并行遍历。
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
# 使用 zip 将两个列表配对
paired = zip(names, scores)
print(list(paired))
# Output: [(\'Alice\', 85), (\'Bob\', 90), (\'Charlie\', 78)]
zip() 的特性
names = ["Alice", "Bob"]
scores = [85, 90, 78]
paired = zip(names, scores)
print(list(paired))
# Output: [(\'Alice\', 85), (\'Bob\', 90)]
2.拆分已配对的列表:可以使用 * 操作符来解压 zip 的结果,分别取得各个列表。
paired = [(\'Alice\', 85), (\'Bob\', 90), (\'Charlie\', 78)]
names, scores = zip(*paired)
print(names) # Output: (\'Alice\', \'Bob\', \'Charlie\')
print(scores) # Output: (85, 90, 78)
zip() 的应用场景
1.同步遍历多个序列:当需要同时遍历多个列表或元组时,使用 zip() 可以更加简洁。
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
for name, score in zip(names, scores):
print(f"{name} scored {score}")
# Output:
# Alice scored 85
# Bob scored 90
# Charlie scored 78
2.创建字典:可以使用 zip() 将两个列表转换为字典。
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
scores_dict = dict(zip(names, scores))
print(scores_dict)
# Output: {\'Alice\': 85, \'Bob\': 90, \'Charlie\': 78}
迭代对象长度不一样
在 Python 中,如果使用 zip() 合併的多个可迭代对象长度不一样,zip() 会自动根据最短的可迭代对象进行合併。也就是说,当其中最短的可迭代对象被耗尽时,zip() 就会停止生成配对
list1 = [1, 2, 3, 4]
list2 = [\'a\', \'b\', \'c\']
# 使用 zip() 合併长度不一样的列表
zipped = list(zip(list1, list2))
print(zipped)
#[(1, \'a\'), (2, \'b\'), (3, \'c\')]
在这个例子中,list2 只有 3 个元素,因此 zip() 只会生成前三个配对,当其中一个列表到达末尾时,zip() 就停止了。