【python】zip的详细用法解释

目录

zip的详细用法解释

语法

1. 基本用法:配对元素

解释:

2. 配对多个可迭代对象

解释:

3. 可迭代对象长度不一致时的行为

解释:

4. 使用 zip() 解压元组

解释:

5. 使用 zip() 与 dict() 一起构造字典

解释:

6. 使用 zip() 进行并行迭代

输出:

解释:

7. 使用 itertools.zip_longest() 处理不同长度的可迭代对象

解释:

8. 用 zip() 创建矩阵

解释:

总结


zip的详细用法解释

zip() 是 Python 中的一个内置函数,用于将多个可迭代对象(如列表、元组、字符串等)逐一配对,形成一个由元组组成的迭代器。

每个元组的元素来自不同的可迭代对象,并且每个元组中的元素按位置配对。

语法

zip(iterable1, iterable2, ..., iterableN)

  • 参数zip() 可以接收多个可迭代对象(如列表、元组、字符串等)。
  • 返回值zip() 返回一个 zip 对象,它是一个迭代器(即惰性求值)。每次迭代返回的是一个元组,其中包含传入可迭代对象中对应位置的元素。
  • 1. 基本用法:配对元素

    zip() 的最常见用途是将两个或更多的可迭代对象中的元素逐个配对。

    # 示例:将两个列表打包成一个元组
    names = ['Alice', 'Bob', 'Charlie']
    ages = [25, 30, 35]
    
    zipped = zip(names, ages)
    print(list(zipped))  # Output: [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
    
    解释:
  • zip(names, ages) 返回一个迭代器,它将 namesages 列表中的元素按位置配对。
  • 通过 list(zipped)zip 对象转换为一个列表,输出为 [(‘Alice’, 25), (‘Bob’, 30), (‘Charlie’, 35)]
  • 2. 配对多个可迭代对象

    你可以使用多个可迭代对象(如多个列表、元组等)作为 zip() 的参数。

    zip() 会将它们按位置逐一配对。

    names = ['Alice', 'Bob', 'Charlie']
    ages = [25, 30, 35]
    genders = ['Female', 'Male', 'Male']
    
    zipped = zip(names, ages, genders)
    print(list(zipped))
    # Output: [('Alice', 25, 'Female'), ('Bob', 30, 'Male'), ('Charlie', 35, 'Male')]
    

    解释:
  • zip(names, ages, genders) 将三个可迭代对象中的元素按位置打包成元组。每个元组包含 namesagesgenders 中相同位置的元素。
  • 3. 可迭代对象长度不一致时的行为

    如果传入的可迭代对象长度不一致,zip() 会按照最短的可迭代对象的长度进行配对,丢弃多余的元素。

    names = ['Alice', 'Bob', 'Charlie']
    ages = [25, 30]
    
    zipped = zip(names, ages)
    print(list(zipped))  # Output: [('Alice', 25), ('Bob', 30)]
    
    解释:
  • zip(names, ages) 会将 namesages 中前两个元素配对,而忽略 names 中的第三个元素,因为 ages 只有两个元素。
  • 4. 使用 zip() 解压元组

    通过 * 运算符,可以解压 zip() 返回的迭代器,将打包在一起的元素解压回原始的可迭代对象。

    names = ['Alice', 'Bob', 'Charlie']
    ages = [25, 30, 35]
    
    zipped = zip(names, ages)
    unzipped = list(zip(*zipped))
    print(unzipped)
    # Output: [('Alice', 'Bob', 'Charlie'), (25, 30, 35)]
    
    解释:
  • zip(*zipped)zipped 中的元素解压回来。每次解压都会将原本在元组中的对应位置的元素提取到一起。
  • *zipped 会将 zipped 展开为多个参数传递给 zip(),从而恢复原来的两个列表。
  • 5. 使用 zip()dict() 一起构造字典

    zip() 可以与 dict() 函数结合,创建字典。zip() 会将两个可迭代对象中的元素配对,dict() 会将这些配对转换为字典的键值对。

    keys = ['name', 'age', 'gender']
    values = ['Alice', 25, 'Female']
    
    result = dict(zip(keys, values))
    print(result)  # Output: {'name': 'Alice', 'age': 25, 'gender': 'Female'}
    
    解释:
  • zip(keys, values)keysvalues 列表中的元素逐一配对,返回一个由元组组成的迭代器。
  • dict() 将这些配对转换为字典,keys 作为字典的键,values 作为字典的值。
  • 6. 使用 zip() 进行并行迭代

    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, ages) 会将 namesages 中的元素逐一配对,在 for 循环中依次解压为 nameage,方便进行并行遍历。
  • 7. 使用 itertools.zip_longest() 处理不同长度的可迭代对象

    如果你需要对长度不一致的可迭代对象进行配对,而不希望丢弃多余的元素,可以使用 itertools.zip_longest()(Python 3.x)代替 zip()。它会使用指定的 fillvalue 填充较短的可迭代对象。

    import itertools
    
    names = ['Alice', 'Bob', 'Charlie']
    ages = [25, 30]
    
    zipped = itertools.zip_longest(names, ages, fillvalue='N/A')
    print(list(zipped))
    # Output: [('Alice', 25), ('Bob', 30), ('Charlie', 'N/A')]
    
    解释:
  • itertools.zip_longest(names, ages, fillvalue='N/A') 会将较短的可迭代对象 ages'N/A' 填充,直到和较长的可迭代对象 names 的长度相等。
  • 8. 用 zip() 创建矩阵

    zip() 还可以用于将一个矩阵转置(交换行和列)。

    matrix = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]
    
    transposed = list(zip(*matrix))
    print(transposed)
    # Output: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    
    解释:
  • *matrixmatrix 的每一行作为单独的参数传递给 zip(),从而实现转置操作。
  • 总结

  • zip() 基本功能:将多个可迭代对象中的元素按位置配对,返回元组组成的迭代器。
  • 长度不一致的行为zip() 会按照最短可迭代对象的长度配对元素,忽略多余的元素。
  • 解压:使用 * 运算符解压 zip() 返回的元组。
  • dict() 配合:可以将两个列表转换为字典。
  • 并行遍历:适合用来并行遍历多个列表。
  • 处理不等长度的可迭代对象:使用 itertools.zip_longest() 来处理不同长度的可迭代对象,避免丢失元素。
  • 通过这些功能,zip() 是一个非常强大的工具,适用于并行处理多个可迭代对象以及在多个领域(如数据处理、矩阵转换、字典创建等)中非常实用。

    作者:资源存储库

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【python】zip的详细用法解释

    发表回复