Python中zip()函数的用法
发布时间:2023-05-20 09:31:27
Python中常用的zip()函数可以将多个可迭代的对象进行压缩,返回一个元组列表,每个元组都表示来自每个可迭代对象的每个元素。
zip()函数的基本用法如下:
zip(*iterables)
其中iterables表示一个或多个可迭代的对象,*表示将这些对象解压成单独的参数。
例如,我们可以将两个列表进行压缩:
a = [1, 2, 3] b = ['a', 'b', 'c'] zip_list = zip(a, b) print(list(zip_list)) # [(1, 'a'), (2, 'b'), (3, 'c')]
从输出结果可以看出,zip()函数将两个可迭代对象逐个取出对应的元素,组成元组,并将所有的元组放入一个列表中返回。
当多个可迭代对象长度不同时,zip()函数会在最短的可迭代对象迭代完成后停止。
例如,我们将一个元组和一个列表进行压缩:
t = (1, 2, 3) l = [4, 5] zip_list = zip(t, l) print(list(zip_list)) # [(1, 4), (2, 5)]
从输出结果可以看出,zip()函数只迭代了两个元素。
如果需要将压缩后的元组进行拆分,可以使用zip()函数的兄弟函数unzip()。不过需要注意的是,Python 3中的zip()函数返回的是一个迭代器,而不是一个列表,需要先将其转换为列表。
# Python 2 a = [1, 2, 3] b = ['a', 'b', 'c'] zip_list = zip(a, b) new_a, new_b = zip(*zip_list) print(list(new_a)) # [1, 2, 3] print(list(new_b)) # ['a', 'b', 'c'] # Python 3 a = [1, 2, 3] b = ['a', 'b', 'c'] zip_list = zip(a, b) new_a, new_b = zip(*list(zip_list)) print(list(new_a)) # [1, 2, 3] print(list(new_b)) # ['a', 'b', 'c']
在上述示例中,我们将两个列表进行压缩后又将其拆分成两个列表,其中\*号用于将zip_list中的元素进行解压。
需要注意的是,在Python 3中,由于zip()函数返回的是迭代器,因此需要先将其转换为列表。
除了上述基本用法外,zip()函数还可以使用函数作为参数,对列表中的元素进行处理。
例如,我们有两个列表,一个表示学生的姓名,另一个表示学生的成绩,现在需要将两个列表进行压缩,同时计算每个学生的平均分:
names = ['Alice', 'Bob', 'Charlie']
scores = [80, 92, 75]
zip_list = zip(names, scores)
# 计算平均分的函数
def calc_average(lst):
return sum(lst) / len(lst)
# 对每个学生的成绩进行处理
result = []
for name, score in zip_list:
result.append((name, score, calc_average([score])))
print(result) # [('Alice', 80, 80.0), ('Bob', 92, 92.0), ('Charlie', 75, 75.0)]
从输出结果可以看出,我们对每个学生的成绩进行了处理,并将处理结果组成一个元组,最终返回一个元组列表。
