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

Python中zip()函数的简单用法及示例

发布时间:2023-07-07 18:19:19

zip()函数是Python内置函数之一,它可以将多个可迭代对象打包成一个元组的列表。zip()函数的用法是将多个列表中的元素按位置进行配对,将各个列表中相同位置的元素打包成一个元组,并返回一个元组的列表。

zip()函数语法如下:

zip(*iterables)

其中,*iterables是可变数量的参数,可以传入多个可迭代对象,比如列表、元组、字符串等。

下面我们来看一个简单的示例,我们有两个列表,一个是姓名列表names,一个是年龄列表ages,我们要将姓名和年龄按位置配对。

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]

zipped = zip(names, ages)
print(list(zipped))

运行结果为:

[('Alice', 25), ('Bob', 30), ('Charlie', 35)]

可以看到,zip()函数将names和ages这两个列表中相同位置的元素打包成了一个元组,并返回了一个元组的列表。

除了两个列表,我们还可以传入更多的可迭代对象,它们的长度可以不同。比如下面的示例,我们有一个班级的学生信息,包括姓名、年龄和成绩。

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
scores = [80, 90, 85]

zipped = zip(names, ages, scores)
print(list(zipped))

运行结果为:

[('Alice', 25, 80), ('Bob', 30, 90), ('Charlie', 35, 85)]

可以看到,zip()函数将三个列表中相同位置的元素打包成了一个元组,并返回了一个元组的列表。

如果传入的可迭代对象的长度不一致,zip()函数会自动以最短的可迭代对象的长度为准进行打包。比如下面的示例,names列表的长度为3,而ages列表的长度为2,那么zip()函数只会打包前两个元素。

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30]

zipped = zip(names, ages)
print(list(zipped))

运行结果为:

[('Alice', 25), ('Bob', 30)]

除了返回一个元组的列表,我们也可以使用for循环来遍历打包后的元组。比如下面的示例,使用for循环打印每个学生的姓名和年龄。

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]

zipped = zip(names, ages)
for name, age in zipped:
    print(f'姓名:{name},年龄:{age}')

运行结果为:

姓名:Alice,年龄:25
姓名:Bob,年龄:30
姓名:Charlie,年龄:35

在使用zip()函数时,我们还可以使用*操作符将打包后的元组分解成各个元素。比如下面的示例,使用*操作符将打包后的元组分解成name和age两个变量。

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]

zipped = zip(names, ages)

name, age = zip(*zipped)
print(name)
print(age)

运行结果为:

('Alice', 'Bob', 'Charlie')
(25, 30, 35)

可以看到,使用*操作符将打包后的元组分解成了两个列表。

在实际应用中,zip()函数常常与其他的Python内置函数搭配使用,比如使用zip()函数可以快速实现矩阵的转置。比如下面的示例,我们有一个3x3的矩阵matrix,使用zip()函数和*操作符可以将其转置成一个新的矩阵。

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

transposed = list(zip(*matrix))
print(transposed)

运行结果为:

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

可以看到,原矩阵被成功转置成了一个新的矩阵。

综上所述,zip()函数可以将多个可迭代对象按位置配对,打包成一个元组的列表。它在处理多个列表的元素配对时非常便利,同时也可以与其他函数搭配使用,实现更多功能。