zip()函数的用途详解
zip()函数是Python内置的一个函数,用于将多个可迭代对象(包括列表、元组、集合等)中对应位置的元素打包成一个元组,然后返回一个元组列表。
它的语法结构是zip(*iterables),其中*iterables表示任意多个可迭代对象,可以是两个、三个、四个或更多。
在实际编程中,zip()函数主要有以下用途:
1. 合并多个列表或元组,生成新的列表
比如,我们有两个列表,一个存储的是英文名,另一个则是对应的中文名。现在要将这两个列表按照对应位置合并成一个新的列表,那么就可以使用zip()函数来实现。
例如:
names = ['Tom', 'Jerry', 'Lucy']
ch_names = ['汤姆', '杰瑞', '露西']
name_tuples = zip(names, ch_names)
# 输出结果为:[('Tom', '汤姆'), ('Jerry', '杰瑞'), ('Lucy', '露西')]
print(list(name_tuples))
在上面的例子中,zip()函数将names和ch_names按照对应位置合并成了一个元组列表,即将每个英文名和相应的中文名打包成了一个元组,这样我们就得到了一个新的列表。
2. 迭代多个列表或元组
zip()函数不仅可以将多个列表合并成新的列表,还可以用来同时迭代多个列表。比如,有两个列表分别存储了学生的姓名和成绩,现在要同时遍历这两个列表,输出每个学生的姓名和成绩,就可以使用zip()函数。
例如:
names = ['Tom', 'Jerry', 'Lucy']
scores = [90, 80, 95]
for name, score in zip(names, scores):
print(name, score)
输出结果为:
Tom 90 Jerry 80 Lucy 95
在上面的例子中,我们使用了zip()函数将names和scores按照对应位置合并成了一个元组列表,这样我们就可以同时遍历这两个列表,并输出每个学生的姓名和成绩。
3. 转换多个列表或元组
有时候需要对多个列表或元组进行某些转换操作,可以使用zip()函数将它们打包成一个元组列表,然后再进行转换操作。
例如,现在有两个列表分别存储了学生的身高和体重,单位分别为厘米和千克,要将这两个列表转换为英制单位(英寸和磅),可以使用zip()函数实现。
具体实现代码如下:
heights = [170, 175, 162]
weights = [65, 70, 55]
def cm_to_in(cm):
return round(cm / 2.54, 2)
def kg_to_lb(kg):
return round(kg * 2.20462, 2)
inches_and_pounds = [(cm_to_in(h), kg_to_lb(w)) for h, w in zip(heights, weights)]
# 输出结果为:[(66.93, 143.3), (68.9, 154.32), (63.78, 121.25)]
print(inches_and_pounds)
在上面的例子中,我们使用了zip()函数将heights和weights按照对应位置合并成了一个元组列表,然后使用列表推导式对这个元组列表做了处理,按照要求将厘米转化成英寸,将千克转化成磅,最后生成了一个新的列表。
4. 解压元组列表
除了打包多个可迭代对象之外,zip()函数还可以用于解压已经打包好的元组列表。
例如,有一个列表,存储了多个元组,每个元组包含了一个学生的姓名和成绩,现在要将这个列表分别解压成两个列表,一个存储学生姓名,另一个存储学生成绩,就可以使用zip()函数。
具体实现代码如下:
students = [('Tom', 90), ('Jerry', 80), ('Lucy', 95)]
names, scores = zip(*students)
# 输出结果为:('Tom', 'Jerry', 'Lucy')和(90, 80, 95)
print(names, scores)
在上面的例子中,我们首先使用zip()函数将元组列表打包成了一个元组列表,然后又使用*运算符解压成了两个列表,分别存储了学生姓名和成绩。
综上所述,zip()函数是Python中一个十分实用的函数,它可以将多个可迭代对象打包成元组,也可以对多个可迭代对象进行迭代、转换和解压等操作,这些功能在实际编程中经常用到。
