Python中的`zip()`函数:将序列中的元素一一配对,返回一个元组列表
在Python中, zip()函数是用于将多个序列一一配对并返回一个元组列表的函数。使用zip()函数,我们可以将两个或多个列表、元组或其他序列按其索引一一配对,并将它们作为元组的形式一一对应组合成一个新的列表。
zip()函数用法:
zip(*iterables)
其中,iterables是需要组合的序列,可以是多个序列,最少需要一个序列。
下面我们来看看zip()是如何工作的。
首先,我们定义两个列表:
x = [1, 2, 3] y = ['a', 'b', 'c']
然后使用zip()函数来将这两个列表配对并返回一个元组列表:
>>> zipped = zip(x, y) >>> list(zipped) [(1, 'a'), (2, 'b'), (3, 'c')]
我们可以看到,zip()函数将列表x和列表y中的元素按照索引一一配对,并将它们组合成元组的形式返回。在本例中,新的列表中包含3个元组,每个元组包含两个元素。
需要注意的是,zip()函数返回的是一个迭代器对象,如果需要得到一个列表对象,我们需要使用list()函数将迭代器转化为列表。
我们也可以将多个序列一同传入zip()函数:
a = [1, 2, 3] b = [4, 5, 6] c = [7, 8, 9] >>> zipped = zip(a, b, c) >>> list(zipped) [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
在上面的例子中,我们将三个列表同时传入zip()函数来将它们一一配对,并组成一个3个元素的元组列表。
需要注意的是,如果被传入的序列中的元素的长度不同,zip()函数将会以长度最短的序列为准,对于超出长度的元素将会被忽略不计。例如:
x = [1, 2, 3] y = ['a', 'b'] >>> zipped = zip(x, y) >>> list(zipped) [(1, 'a'), (2, 'b')]
在上面的例子中,列表y只有2个元素,而列表x有3个元素。因为zip()函数会以最短的序列为准,所以列表y的最后一个元素并没有被包含在函数返回的元组列表中。
在Python中,我们也可以使用zip()函数来解压缩序列。解压缩操作与压缩操作正好相反,可以将一个元组列表转化为多个序列。例如:
>>> zipped = [(1, 'a'), (2, 'b'),(3, 'c')]
>>> x, y = zip(*zipped)
>>> x
(1, 2, 3)
>>> y
('a', 'b', 'c')
可以看到,zip()函数将元组列表zipped解压缩为两个序列x和y。
总结:
- zip()函数是将多个序列一一配对并返回一个元组列表的函数。
- zip()函数是一个迭代器对象,如果需要得到一个列表对象,我们需要使用list()函数将迭代器转化为列表。
- 如果被传入的序列中的元素的长度不同,zip()函数将会以长度最短的序列为准,对于超出长度的元素将会被忽略不计。
- zip()函数还可以将一个元组列表转化为多个序列。
