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

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)]

从输出结果可以看出,我们对每个学生的成绩进行了处理,并将处理结果组成一个元组,最终返回一个元组列表。