Python zip()函数

Python zip() 是一个通用函数,可用于并行迭代两个或多个可迭代对象。它可以从两个或多个迭代对象创建元组列表,或者将两个字典合并到一个字典中。让我们探讨一下在 Python 中使用 zip() 函数还可以做什么。

Python zip() 的简要介绍

Python 的 zip() 函数用于将多个集合(如列表、元组或字符串)合并和同步到一个新的元组序列中。它接受两个或多个可迭代对象作为输入并返回一个 zip 对象。zip 对象是一个生成器,它从可迭代对象生成相应元素的元组。zip 对象的长度是最短可迭代对象的长度。语法如下:

zip(*iterables, **kwargs)

参数的简短描述:

  • iterables:可迭代对象的序列。
  • fillvalue:在可迭代对象长度不同时用于填充空白的值。

以下是Python zip函数的一些流行变体。检查这些并学习如何在 Python 中使用 zip 函数。

简单的 zip() 函数

zip(*iterables):这是使用 zip() 函数的最常见方式。它接受一系列可迭代对象作为输入并返回一个 zip 对象。以下代码从两个列表创建一个 zip 对象:

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

zipped = zip(list1, list2)

print(zipped)

代码的输出是一个 zip 对象。可以迭代此对象以从两个列表中生成相应元素的元组:

for item in zipped:
    print(item)

代码的输出为:

(1, 'a')
(2, 'b')
(3, 'c')

传递填充值

zip(*iterables, fillvalue=value):Python zip 函数的这种变体采用一系列可迭代对象和 .第二个参数指定在可迭代对象长度不同时应用于填充空白的值。fillvalue

以下代码使用 fill value 参数来填充 zip 对象中的空白:

list1 = [1, 2, 3]
list2 = ['a', 'b']

zipped = zip(list1, list2, fillvalue='x')

print(zipped)

代码的输出为:

[(1, 'a'), (2, 'b'), (3, 'x')]

返回元组列表

list(zip(*iterables)):zip() 函数的这种变体从 zip 对象返回元组列表。

下面的代码从两个列表创建元组列表:

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

zipped = list(zip(list1, list2))

print(zipped)

代码的输出为:

[(1, 'a'), (2, 'b'), (3, 'c')]

下表总结了 Python zip 函数的不同变体以及如何使用它们:

变化

语法

描述

zip(*iterables)

zip(list1, list2)

从可迭代对象返回一个 zip 对象。

zip(*iterables, fillvalue=value)

zip(list1, list2, fillvalue='x')

从可迭代对象返回一个 zip 对象,用值填充空白。value

list(zip(*iterables))

list(zip(list1, list2))

返回 zip 对象中的元组列表。


Python zip() 示例

Python 中的 zip() 函数是一个通用函数,你可以用它做很多独特的事情。以下是一些示例:

并行迭代两个或多个列表

Zip() 将来自多个可迭代对象的相应位置的元素配对,允许同时迭代。它简化了相关数据的处理。在这个例子中,我们有两个列表,名称和年龄,我们使用zip()将名称与其相应的年龄配对,以便于打印。

names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 22]

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

合并两个词典

Python zip() 可以合并来自两个字典的键值对,创建一个新的和谐字典。在这个例子中,我们有两个字典,dict1 和 dict2,我们使用 zip() 将它们的键值对组合成一个新的字典merged_dict。

dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}

merged_dict = dict(zip(dict1.keys(), dict2.values()))
print(merged_dict)

转置矩阵

Zip() 通过翻转行和列来转置 2D 矩阵,无缝地重新排列数据。在这个例子中,我们有一个 2D 矩阵,我们使用 zip(*matrix) 将其转置为transposed_matrix。

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

transposed_matrix = list(zip(*matrix))
print(transposed_matrix)

将两个或多个列表排序在一起

Python zip 可用于将两个或多个可迭代对象排序在一起。在这个例子中,我们有两个列表,名称和分数,我们使用zip()将它们配对在一起。然后,我们使用 Python sorted() 函数和 reverse=True 根据分数降序对数据进行排序。

names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]

sorted_data = sorted(zip(scores, names), reverse=True)
print(sorted_data)

循环遍历多个列表

Zip() 有助于同时遍历名称和分数,配对相关数据。在这个例子中,我们使用zip()来组合名字和分数,并将它们一起迭代,允许我们打印每个人的名字和他们的分数。

names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]

for name, score in zip(names, scores):
    print(f"{name} scored {score} marks.")

查找常见元素

Zip() 有助于发现 list1 和 list2 之间的公共元素,配对相应的元素进行比较。在这个例子中,我们有两个列表,list1 和 list2,我们使用 zip() 来配对它们的元素。然后,我们将对转换为一组以找到公共元素。

list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]

common_elements = set(zip(list1, list2))
print(common_elements)

不同大小的拉链列表

如果列表的大小不同,zip() 函数将只将元素配对到最短列表的长度。它不会包括结果中的其余元素。

例如,以下代码将压缩两个不同长度的列表:

list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c']

zipped = zip(list1, list2)

print(zipped)

此代码将打印以下输出:

[(1, 'a'), (2, 'b'), (3, 'c')]

如您所见,zip() 函数仅配对每个列表的前三个元素。列表 1 的第四个元素被忽略,列表 2 的第三个元素也被忽略。

如果要压缩不同大小的列表并包含所有元素,则可以使用该功能。此函数将尽可能多地配对列表的元素,然后用值填充剩余的元素。请参阅下面的示例。itertools.zip_longest()None

import itertools

list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c']

zipped = itertools.zip_longest(list1, list2, fillvalue=None)

print(zipped)

# [(1, 'a'), (2, 'b'), (3, 'c'), (None, None)]

但是,我们甚至可以添加实际元素而不是 附加 .检查更新的示例。None

import itertools

list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c']
extra_values = ['d', 'e', 'f']

zipped = itertools.zip_longest(list1, list2, fillvalue=extra_values)

print(zipped)

# [(1, 'a'), (2, 'b'), (3, 'c'), ('d', 'd'), ('e', 'e'), ('f', 'f')]

总结

Python zip() 函数它可以并行配对多个列表中的元素。

它可用于简化数据操作,使迭代多个列表、合并字典、转置矩阵和查找公共元素变得更加容易。因此,毫无疑问,我们可以说zip()函数是Python数据处理的强大工具。

相关文章

一文掌握Python中zip()函数

理解zip()zip()函数接受两个或多个可迭代对象作为参数,并返回一个迭代器,该迭代器聚合每个可迭代对象中的元素。可以把它想象成一个拉链,把不同列表中的元素组合成一个可迭代的元组。当处理相关数据但存...

python内置zip函数详解

在Python中,zip是一个内置函数(其实是一个class),可以将多个可迭代对象(如列表、元组等)作为参数,将对象中对应index的元素打包成一个个的元组,然后返回由这些元组tuple组成的zi...

Python中的zip函数详解,高效组合多个序列

左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取编程资料在Python中,处理数据时经常需要同时遍历多个序列。zip函数提供了一种简洁的方式来组合这些序列...

Python zip函数核心应用解析:多数据流处理的高效方案

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。技术价值定位根据PyPI官方统计,Python标准库中zip函数在数据处理场景的使用率达68%。本文通过12个生产级案例,系统解析...

Python的zip函数:数据配对的神奇纽带

对话实录小白:(苦恼)我有两个列表,一个存名字,一个存年龄,想把它们对应起来,好麻烦啊!专家:(掏出魔法棒)用zip函数,一键搞定数据配对难题!zip函数基础直击1 zip类接收2个参数iterabl...