欢迎访问宙启技术站
智能推送

Pythonzip函数的用法和示例

发布时间:2023-06-23 07:03:53

Python中的zip()函数是一种方便的方式,可以同时迭代多个序列并将它们一起打包成一个元组序列。所谓的打包是指将几个序列中相同位置的元素组合在一起,然后生成一个元组。在这个元组中,第 i 个元素是来自于第 i 个序列的元素。zip()函数返回的对象是一个可迭代的对象,可以被转换成list或直接循环遍历。

zip()函数的语法:

zip(*iterables)

其中,*iterables的意思是零个或多个要打包的可迭代对象。即是说,zip()函数可以接受多达无限个的可迭代对象作为参数。当然,每个可迭代对象的长度可以不一致。在打包的过程中,由于zip()会以最短的可迭代对象的长度为准,所以如果有一个可迭代对象结束,那么zip()会自动停止打包,缺失的位置就用None来补齐。

下面进入一些常见的应用场景。

## 示例一:合并列表

使用zip()函数最常见的场景之一是,用它将两个(或更多)列表合并到一个列表中。 我们可以将它们的元素打包成一个元组,然后将元组添加到新列表中,如下所示:

a = [1, 2, 3]
b = [4, 5, 6]
result = list(zip(a, b))

print(result)
# [(1, 4), (2, 5), (3, 6)]

我们可以看到,两个列表中的元素从左到右一一配对到了一个元组中,最后生成了一个包含3个元素的列表。

如果这两个列表的长度不一样,就按最短的列表长度来配对元素,丢弃多余的元素。例如:

a = [1, 2, 3, 4]
b = [4, 5, 6]
result = list(zip(a, b))

print(result)
# [(1, 4), (2, 5), (3, 6)]

## 示例二:转换字典

除了合并列表,我们有时还可以使用zip()将两个列表转换为字典。前提是,要将一个列表作为键,另一个列表作为值,两个列表的长度必须相同。

keys = ['a', 'b', 'c']
values = [1, 2, 3]
my_dict = dict(zip(keys, values))

print(my_dict)
# {'a': 1, 'b': 2, 'c': 3}

## 示例三:翻转字典

我们也可以使用zip()函数来翻转字典,即将键和值交换位置。

my_dict = {'a': 1, 'b': 2, 'c': 3}
new_dict = dict(zip(my_dict.values(), my_dict.keys()))

print(new_dict)
# {1: 'a', 2: 'b', 3: 'c'}

## 示例四:遍历多个列表

zip()函数还可以同时迭代多个列表,可以轻松地遍历它们。例如:

a = [1, 2, 3]
b = ['a', 'b', 'c']
c = [4.0, 5.0, 6.0]

for x, y, z in zip(a, b, c):
    print(x, y, z)

以上代码可以输出

1 a 4.0
2 b 5.0
3 c 6.0

## 示例五:打包和解包元素

由于zip()函数返回的对象是一个可迭代的对象,因此我们可以对它进行解包(即返回元组中的单个元素),如下所示:

pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
numbers, letters = zip(*pairs)

print(numbers)
print(letters)

由于我们之前已经将每个配对的元素打包到特定元组中,因此我们可以使用星号运算符(*)将其打开,以便将这些特定元组中的单个元素解压缩到列表中。输出如下所示:

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

## 总结

在Python中,zip()函数使得多个顺序相同的对象可以被同时迭代,打包成为一个元组。可以用于遍历多个列表,转换字典等等。熟练掌握它的用法可以使我们的代码更加简洁和高效。