python zip() 函数的用法
在 Python 里,zip()
函数能够把多个可迭代对象(像列表、元组、字符串等)中对应的元素组合成元组,最终返回一个由这些元组构成的迭代器。下面为你详细介绍它的用法:
基本语法
zip(*iterables)
这里的 *iterables
表示接受多个可迭代对象作为参数。
简单示例
下面展示了如何使用 zip()
函数将两个列表进行配对:
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]zipped = zip(names, ages)
print(list(zipped)) # 输出:[('Alice', 25), ('Bob', 30), ('Charlie', 35)]
当有多个可迭代对象时,zip()
函数会从每个可迭代对象中依次取出元素,组合成元组。
处理不同长度的可迭代对象
若可迭代对象的长度不一致,zip()
会以最短的可迭代对象为标准来截断结果:
names = ['Alice', 'Bob'] # 长度为 2
ages = [25, 30, 35] # 长度为 3zipped = zip(names, ages)
print(list(zipped)) # 输出:[('Alice', 25), ('Bob', 30)]
解压操作
借助 *
操作符和 zip()
函数,可以实现对已组合的元素进行解压:
pairs = [('Alice', 25), ('Bob', 30)]
names, ages = zip(*pairs)print(names) # 输出:('Alice', 'Bob')
print(ages) # 输出:(25, 30)
与循环结合使用
在循环中,zip()
函数非常实用,能够同时遍历多个可迭代对象:
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]for name, age in zip(names, ages):print(f"{name} is {age} years old.")# 输出:
# Alice is 25 years old.
# Bob is 30 years old.
# Charlie is 35 years old.
处理多个可迭代对象
zip()
函数可以处理任意数量的可迭代对象:
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
cities = ['New York', 'London', 'Paris']zipped = zip(names, ages, cities)
print(list(zipped))
# 输出:[('Alice', 25, 'New York'), ('Bob', 30, 'London'), ('Charlie', 35, 'Paris')]
使用 itertools.zip_longest
要是你希望在处理不同长度的可迭代对象时,以最长的对象为标准,缺失的部分用指定值填充,可以使用 itertools.zip_longest
(在 Python 2 中名为 izip_longest
):
from itertools import zip_longestnames = ['Alice', 'Bob'] # 长度为 2
ages = [25, 30, 35] # 长度为 3zipped = zip_longest(names, ages, fillvalue=None)
print(list(zipped)) # 输出:[('Alice', 25), ('Bob', 30), (None, 35)]
注意事项
- 返回的是迭代器:在 Python 3 中,
zip()
返回的是一个迭代器,这意味着它是惰性求值的。如果需要将结果存储下来或者多次使用,建议将其转换为列表(如list(zip(...))
)。 - 内存效率高:由于
zip()
返回的是迭代器,在处理大规模数据时,它的内存效率更高。 - 元素顺序:
zip()
函数会按照可迭代对象中元素的原有顺序进行组合。