Python中的zip函数:使用及示例
Python的内置函数zip()给予多个列表,同时迭代这些列表中的元素,生成一个新的可迭代对象,其中的元素是每个列表中相同位置的元素共同组成的元组(tuple)。zip()函数常用于同时循环多个列表,对它们进行操作,如加法运算、拼接等。下面是zip()函数的使用及示例。
使用方法:
zip()函数的基本语法如下:
zip(*iterables)
其中*iterables表示可迭代对象,可以是多个序列,如列表、元组、字典等。zip()函数返回一个可迭代对象,其中的元素是每个序列中相同位置的元素组成的元组。如果输入序列的长度不同,那么zip()函数将以最短的序列长度为准。
示例:
假设有3个列表分别表示小明、小红和小李的成绩,如下:
score_ming = [80, 90, 95]
score_hong = [85, 92, 90]
score_li = [90, 88, 92]
现在要计算这3个人的平均成绩,可以使用zip()函数同时遍历这3个列表,对应位置的元素共同组成一个元组:
for x in zip(score_ming, score_hong, score_li):
print(x)
输出结果:
(80, 85, 90)
(90, 92, 88)
(95, 90, 92)
可以看到,每个元素都是一个由3个成绩组成的元组。
接下来,可以对这些元组进行加法运算,计算每位同学的总成绩:
total_score = [sum(x) for x in zip(score_ming, score_hong, score_li)]
其中,sum()函数用于计算序列中元素的总和。输出结果:
[255, 270, 275]
最后,可以求每位同学的平均成绩:
avg_score = [x/3 for x in total_score]
输出结果:
[85.0, 90.0, 91.66666666666667]
另外,如果输入的是字典,则zip()函数默认遍历的是字典的键(key)。例如,将上述3个同学的成绩以字典的形式存储:
scores = {'ming': [80, 90, 95], 'hong': [85, 92, 90], 'li': [90, 88, 92]}
可以直接使用zip()函数遍历字典:
for key, value in zip(scores.keys(), scores.values()):
print(key, value)
输出结果:
ming [80, 90, 95]
hong [85, 92, 90]
li [90, 88, 92]
需要注意的是,Python 3中的zip()函数返回的是一个迭代器,需要使用list()函数将其转换为列表,才能进行操作。例如,将上述3个同学的成绩以元组的形式存储:
scores = [(80, 85, 90), (90, 92, 88), (95, 90, 92)]
可以直接将其转换为列表,再进行操作:
total_score = [sum(x) for x in list(zip(*scores))]
avg_score = [x/3 for x in total_score]
输出结果与之前相同。
总结:
zip()函数是Python中一种常用的迭代器,具有便捷的多序列遍历、多序列操作等功能。可适用于各种数据结构,包括列表、元组、字典等。在需要对多个序列进行协同操作的情况下,zip()函数将是一个非常实用的工具。
