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

zip()函数的用途详解

发布时间:2023-06-09 12:18:29

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中一个十分实用的函数,它可以将多个可迭代对象打包成元组,也可以对多个可迭代对象进行迭代、转换和解压等操作,这些功能在实际编程中经常用到。