Python中zip()函数的简单用法及示例
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()函数可以将多个可迭代对象按位置配对,打包成一个元组的列表。它在处理多个列表的元素配对时非常便利,同时也可以与其他函数搭配使用,实现更多功能。
