python中zip()函数的用法

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开发中应用广泛。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签