Python 内建函数列表 > Python 的内置函数 zip

Python 的内置函数 zip() 是一个非常有用的工具函数,用于将多个可迭代对象(如列表、元组等)中的元素按顺序打包成一个个元组,然后返回由这些元组组成的迭代器。其基本语法为:

zip(*iterables)

其中,iterables 可以是多个可迭代对象,比如列表、元组、字符串等。zip() 函数会将这些可迭代对象中相同索引位置的元素组合成一个元组,最终返回一个迭代器。

主要特点

  1. 并行迭代zip() 可以同时遍历多个可迭代对象,非常适合在需要同时处理多个序列数据时使用。
  2. 惰性计算zip() 返回的是一个迭代器,而不是列表,只有在需要时才会生成数据,这在处理大数据集时能节省内存。
  3. 长度匹配:当输入的可迭代对象长度不一致时,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)

应用场景

  1. 数据配对:将多个列表中的数据一一对应组合。
  2. 并行处理:在循环中同时处理多个序列数据。
  3. 字典构造:结合 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()