Pythonzip函数的用法和示例
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()函数使得多个顺序相同的对象可以被同时迭代,打包成为一个元组。可以用于遍历多个列表,转换字典等等。熟练掌握它的用法可以使我们的代码更加简洁和高效。
