Python内置函数zip()详解:同步遍历多个序列与元素配对技巧

Python zip() 函数是一个内建函数,用于将可迭代对象(如列表、元组、字符串等)中的元素按位置配对,并将这些配对的元素打包成元组,最后返回一个包含这些元组的迭代器(在 Python 3 中)或列表(在 Python 2 中)。zip() 函数允许你同时遍历多个序列的相应元素,特别适用于需要对多个数据集进行同步处理的场景。

以下是 zip() 函数的基本用法、行为特性和示例:

基本语法

zip(*iterables)

其中:

  • *iterables: 一个或多个可迭代对象。这些对象可以是相同长度的列表、元组、字符串或其他任何可迭代类型。

行为特性

  • 元素配对:zip() 函数将每个可迭代对象的第 i 个元素组合成一个元组,直到某个可迭代对象耗尽为止。
  • 最短序列决定长度:如果传入的可迭代对象长度不等,zip() 结果的长度由最短的可迭代对象决定,即当最短的可迭代对象遍历完后,剩余未遍历完的长序列的元素将被忽略。
  • 返回类型
  • Python 2: 返回一个列表,其中包含所有配对元素构成的元组。
  • Python 3: 返回一个特殊的迭代器对象(zip 对象),需要通过 list() 函数将其转换为列表,或者直接在循环中迭代使用。

示例

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)
print(list(zipped))  # 在 Python 3 中需要显式转换为列表
# 输出:[(1, 'a'), (2, 'b'), (3, 'c')]

在这个例子中,zip() 函数将列表 list1 和 list2 中的元素一一对应地打包在一起,返回一个由元组组成的列表。结果是一个包含三个元组的列表,每个元组包含了原列表中对应位置上的元素。

其他用法

  • 向 zip() 函数传递零个参数:返回一个空迭代器。
  • 向 zip() 函数传递一个参数:返回一个迭代器,其中每个元素都是原序列中的单个元素,以元组形式包装。
  • 向 zip() 函数传递两个以上参数:按位置将各序列的元素配对。
  • 使用 * 运算符解压元组:可以将 zip() 结果的元组解压为单独的变量或在循环中直接访问。

应用场景

  • 数据对齐:在数据分析中,将不同列的数据按照相同的行索引对齐。
  • 创建字典:将两个列表(键列表和值列表)合并为一个字典。
  • 并行迭代:同时遍历多个数据结构中的对应元素进行操作。

示例:创建字典

keys = ['apple', 'banana', 'cherry']
values = [1.25, 0.75, 2.99]
fruit_prices = dict(zip(keys, values))
print(fruit_prices)
# 输出:{'apple': 1.25, 'banana': 0.75, 'cherry': 2.99}

示例:并行迭代

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 3½, 40]

for name, age in zip(names, ages):
    print(f"{name} is {age} years old.")

总之,Python 的 zip() 函数提供了一种便捷的方式来同步遍历多个可迭代对象的元素,常用于数据结构的合并、对齐和并行处理任务。根据需要,可以结合其他Python特性(如列表推导式、字典构造等)进一步处理zip()返回的结果。在Python 3中,由于其返回迭代器的特性,使用时需注意适时转换为列表或直接在循环中迭代以节省内存。


存档地址:https://www.yuque.com/worthstudy/study/ghg5q7iubivhsqfg?singleDoc# 《zip()函数》

© 版权声明
THE END
喜欢就点赞支持一下吧,如果觉得不错或日后有所需要,可以收藏文章和关注作者哦。
点赞0打赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容