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

如何使用Python中的zip()函数同时遍历两个列表?

发布时间:2023-06-16 07:40:00

Python中的zip()函数是一种非常有用的函数,可以用来同时遍历两个或多个列表。它将两个或多个可迭代对象转换为一个元组的列表,其中每个元组包含来自每个可迭代对象的对应元素。

zip()函数的语法如下:

zip(*iterators)

其中,*iterators表示一个可变数量的参数列表,可以是任何可迭代对象,如列表、元组、字典、集合等等。

下面我们来看一个常用的例子。假设我们有两个列表,分别表示学生的姓名和成绩:

names = ['Tom', 'Jerry', 'Bob', 'Alice']

scores = [85, 92, 78, 90]

如果我们想要将这两个列表对应起来,即得到一个包含学生姓名和成绩的元组的列表,可以使用zip()函数来实现:

result = zip(names, scores)

此时,result会变成一个迭代器对象,它包含了四个元组,每个元组都包含一个姓名和对应的成绩。我们可以使用list()函数将其转换为一个列表,以便更方便地进行操作和输出:

result_list = list(result)

print(result_list)

输出结果为:

[('Tom', 85), ('Jerry', 92), ('Bob', 78), ('Alice', 90)]

如此一来,我们就可以方便地同时遍历这两个列表了。例如,我们可以使用for循环来输出每个学生的姓名和成绩:

for name, score in result_list:

    print(name, score)

输出结果为:

Tom 85

Jerry 92

Bob 78

Alice 90

值得注意的是,由于zip()函数返回的是一个迭代器对象,因此一旦遍历过一次,就不能再次使用。如果我们需要重复使用zip()返回的元组列表,请先将其转换为列表进行操作。

除了用于遍历两个列表外,zip()函数还可以用于其他许多情况,如将字典的键和值对调、将多个列表按照相同的位置合并为一个列表等。下面我们分别来看一下。

将字典的键和值对调

假设我们有一个字典,包含了每个城市的名称及其对应的人口数量:

population = {'New York': 8398748, 'Los Angeles': 3990456, 'Chicago': 2705994}

如果我们想要将其键和值对调,即得到一个新的字典,其中人口数量成为键,城市名称成为值,可以使用如下代码:

new_population = dict(zip(population.values(), population.keys()))

此时,new_population会得到如下的字典:

{8398748: 'New York', 3990456: 'Los Angeles', 2705994: 'Chicago'}

这种方法可以方便地处理字典中的重复值,因为每个值只会出现一次。

将多个列表按照相同的位置合并为一个列表

假设我们有三个列表,分别表示学生的姓名、性别和年龄:

names = ['Tom', 'Jerry', 'Bob', 'Alice']

genders = ['Male', 'Male', 'Male', 'Female']

ages = [18, 19, 20, 21]

如果我们想要将这三个列表合并为一个包含学生姓名、性别和年龄的元组的列表,可以使用如下代码:

students = list(zip(names, genders, ages))

此时,students会得到如下的列表:

[('Tom', 'Male', 18), ('Jerry', 'Male', 19), ('Bob', 'Male', 20), ('Alice', 'Female', 21)]

这种方法可以方便地将多个列表合并为一个,而不必担心它们的长度或顺序是否相同。

总结

zip()函数是Python中非常有用的一个函数,可以用来同时遍历两个或多个可迭代对象,并将它们组合成一个元组的列表。它不仅可以用于遍历两个列表,还可以用于将字典的键和值对调、将多个列表按照相同的位置合并为一个列表等。在处理数据集合时,zip()函数是一个非常方便的工具,值得我们广泛学习和使用。