Python 内建函数列表 > Python 的内置函数 zip
Python 的内置函数 zip() 是一个非常有用的工具函数,用于将多个可迭代对象(如列表、元组等)中的元素按顺序打包成一个个元组,然后返回由这些元组组成的迭代器。其基本语法为:
zip(*iterables)
其中,iterables 可以是多个可迭代对象,比如列表、元组、字符串等。zip() 函数会将这些可迭代对象中相同索引位置的元素组合成一个元组,最终返回一个迭代器。
主要特点
- 并行迭代:
zip()可以同时遍历多个可迭代对象,非常适合在需要同时处理多个序列数据时使用。 - 惰性计算:
zip()返回的是一个迭代器,而不是列表,只有在需要时才会生成数据,这在处理大数据集时能节省内存。 - 长度匹配:当输入的可迭代对象长度不一致时,
zip()会以最短的可迭代对象为准,忽略多余的元素。
示例
假设有两个列表:
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
使用 zip() 将它们组合:
zipped = zip(names, ages)
print(list(zipped)) # 输出:[('Alice', 25), ('Bob', 30), ('Charlie', 35)]
解压
可以使用 zip(*zipped) 来解压数据:
names_unzipped, ages_unzipped = zip(*zipped)
print(names_unzipped) # 输出:('Alice', 'Bob', 'Charlie')
print(ages_unzipped) # 输出:(25, 30, 35)
应用场景
- 数据配对:将多个列表中的数据一一对应组合。
- 并行处理:在循环中同时处理多个序列数据。
- 字典构造:结合
dict()快速构造字典:person_dict = dict(zip(names, ages)) print(person_dict) # 输出:{'Alice': 25, 'Bob': 30, 'Charlie': 35}
注意事项
- 在 Python 2 中,
zip()直接返回一个列表,而在 Python 3 中返回的是迭代器。如果需要列表,需显式转换为list()。 - 如果输入的可迭代对象长度不同,
zip()会以最短的为准,忽略多余的元素。如果需要以最长的为准,可以使用itertools.zip_longest()。