1. 概述
Zip()函数是python自带的一个内置函数,它可以同时迭代多个可迭代对象(列表、元组、字典等)并将它们打包为一个元组组成的列表返回,也可以将这些元组解压为多个列表、元组。该函数的语法如下:
zip(iter1 [,iter2 [...]])
其中iter1, iter2, ... 是要同时迭代的多个可迭代对象。
2. zip()函数的基本用法
2.1 将多个可迭代对象打包为元组组成的列表
首先我们需要定义多个可迭代对象,这里我们定义三个列表作为示例:
a = [1, 2, 3]
b = ('a', 'b', 'c')
c = 'python'
然后我们使用zip()函数将这些可迭代对象打包为一个元组组成的列表:
result = zip(a, b, c)
print(list(result)) # 输出[(1, 'a', 'p'), (2, 'b', 'y'), (3, 'c', 't')]
可以看到,zip()函数将三个可迭代对象打包为了一个元组组成的列表。其中,列表a中的第一个元素1与元组b中的第一个元素'a'以及字符串c中的第一个字符'p'组成了一个元组(1, 'a', 'p'),以此类推。
2.2 解压zip()函数返回的元组
除了将多个可迭代对象打包为元组组成的列表之外,zip()函数也可以将这些元组解压为多个列表或者元组。具体的代码实现如下:
a, b, c = zip(*[(1, 'a', 'p'), (2, 'b', 'y'), (3, 'c', 't')])
print(a) # 输出(1, 2, 3)
print(b) # 输出('a', 'b', 'c')
print(c) # 输出('p', 'y', 't')
在解压元组时,需要在元组前面添加一个*号,像这样:*[(1, 'a', 'p'), (2, 'b', 'y'), (3, 'c', 't')]。
3. zip()函数的应用
3.1 同时迭代多个列表
在实际开发中,经常会需要同时迭代多个列表,例如下面这个实例:
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
genders = ['female', 'male', 'male']
for name, age, gender in zip(names, ages, genders):
print('{} is {} years old and {}'.format(name, age, gender))
上面的代码中,我们通过zip()函数实现了同步迭代多个列表,并在每次循环中输出该循环中对应的三个元素。
运行结果如下所示:
Alice is 25 years old and female
Bob is 30 years old and male
Charlie is 35 years old and male
3.2 计算多个列表的元素和
有时候我们需要计算多个列表中对应位置上的元素和,可以通过zip()函数来实现。代码实现如下:
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
result = [sum(x) for x in zip(a, b, c)]
print(result) # 输出[12, 15, 18]
上面的代码中,我们使用zip()函数将三个列表a、b、c打包为一个元组组成的新列表,再使用列表解析式计算每个元组中对应位置上的元素和。
3.3 将两个列表合并为字典
zip()函数可以将两个列表合并为一个字典,其中一个列表为key,另一个列表为value。
keys = ['name', 'age', 'gender']
values = ['Alice', 25, 'female']
result = dict(zip(keys, values))
print(result) # 输出{'name': 'Alice', 'age': 25, 'gender': 'female'}
上面的代码中,我们使用zip()函数将两个列表keys和values打包为一个元组组成的新列表,再使用dict()函数将该新列表转为字典。
4. 总结
zip()函数是Python内置的一个非常实用的函数,可以同时迭代多个可迭代对象,用于将多个列表、元组、字典打包为一个元组组成的列表,或者将这些元组解压为多个列表、元组。除此之外,zip()函数还可以实现同步迭代多个列表、计算多个列表的元素和、合并两个列表为字典等实用功能,在Python开发中应用广泛。