Python中同时遍历多个列表的方法

在Python中,有时候我们需要同时遍历多个列表。这种情况可以使用zip()函数来实现。zip()函数能够将多个列表的对应元素打包成一个元组,然后返回一个包含这些元组的迭代器。下面我们来具体了解一下如何使用zip()函数来同时遍历多个列表。

使用zip()函数同时遍历多个列表

首先,我们可以创建几个简单的列表来展示如何同时遍历它们。假设我们有三个列表list1list2list3,它们分别存储了不同的数据。

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

现在,我们可以使用zip()函数将这三个列表打包成一个元组的列表。

zipped = zip(list1, list2, list3)

这样,我们就得到了一个zipped的迭代器,其中包含了每个列表对应位置上的元素组成的元组。接下来,我们可以使用for循环来遍历这个迭代器,并打印出每个元组。

for item in zipped:
    print(item)

输出结果为:

(1, 4, 7)
(2, 5, 8)
(3, 6, 9)

如上所示,我们成功地同时遍历了三个列表,并获取了它们对应位置上的元素。

处理不同长度的列表

当我们需要同时遍历的多个列表的长度不一致时,zip()函数的行为会有所不同。默认情况下,zip()函数会以最短的列表为准,忽略长度超出的部分。例如,如果我们有一个长度为4的list1和一个长度为3的list2,那么zip()函数只会生成一个长度为3的迭代器,其中包含了两个列表对应位置上的元素。

list1 = [1, 2, 3, 4]
list2 = [5, 6, 7]
zipped = zip(list1, list2)

for item in zipped:
    print(item)

输出结果为:

(1, 5)
(2, 6)
(3, 7)

如上所示,zip()函数会自动忽略list1的第四个元素。

如果我们希望保留所有元素,包括长度不一致的部分,可以使用itertools.zip_longest()函数。这个函数会以最长的列表为准,在短列表的位置上填充None或指定的填充值。

from itertools import zip_longest

list1 = [1, 2, 3, 4]
list2 = [5, 6, 7]
zipped = zip_longest(list1, list2)

for item in zipped:
    print(item)

输出结果为:

(1, 5)
(2, 6)
(3, 7)
(4, None)

如上所示,zip_longest()函数将list1的第四个元素填充为None

使用解压缩符号*

在上面的例子中,我们使用了for循环和元组来分别访问zip()函数返回的元组。如果我们只关心每个列表对应位置上的元素而不需要元组,那么可以使用解压缩符号*来简化代码。

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

for item1, item2, item3 in zip(list1, list2, list3):
    print(item1, item2, item3)

输出结果为:

1 4 7
2 5 8
3 6 9

如上所示,我们可以直接使用变量名来接收zip()函数返回的元组中的元素,从而避免使用额外的元组。

总结

通过使用zip()函数,我们可以方便地同时