Python 如何并行迭代两个列表
在Python中,使用for循环常用于迭代单个数据结构,如列表,但如果我们需要同时迭代两个/多个列表怎么办?在本文中,我们将看到不同的方法来并行迭代两个/多个列表。
通过使用range()函数,我们可以并行迭代两个列表。让我们看下面的示例以及我们如何在Python中并行迭代两个列表。
如果两个列表的长度相同,使用for循环
假设两个列表的长度相同,在这里我们使用len()方法来获取列表对象的长度。
示例
l1 = ['a', 'b', 'c', 'd', 'e']
l2 = [97, 98, 99, 100, 101]
length = len(l1) # Assuming both lists have same length
for i in range(length):
print(l1[i], l2[i])
输出
a 97
b 98
c 99
d 100
e 101
如果两个列表的长度不相同
假设两个列表是不相等的,我们将使用最小长度的范围来迭代for循环。
例子
L1 = [1, 2, 3, 4, 5, 6, 7]
L2 = ['a', 'b', 'c']
length = len(L1) if len(L1)<=len(L2)else len(L2)
for i in range(length):
print(L1[i], L2[i])
输出
1 a
2 b
3 c
列表对象l1, l2的长度分别为7和3,我们将最小长度3应用于range()函数,以便成功地同时迭代这两个列表。注意:如果我们使用最大长度来迭代for循环,那么它将引发IndexError。
使用zip()函数
zip()函数是一个python内置函数,它返回一个zip对象,表示元组的迭代器。zip()函数运行到所有可迭代对象中的最小长度。
例子
l1 = [1, 2, 3, 4, 5, 6, 7]
l2 = ['a', 'b', 'c']
for ele_l1, ele_l2 in zip(l1, l2):
print(ele_l1, ele_l2)
输出
1 a
2 b
3 c
与前面的例子一样,zip()函数也会在两个输入可迭代对象的最小长度上迭代for循环。
使用itertools.zip_longest()方法
zip_longest()方法接受多个可迭代对象作为参数并返回一个迭代器。该函数的工作方式与zip()函数完全相同,但它是基于最长的输入可迭代对象工作。
语法
zip_longest( iterable1, iterable2, fillval)
示例
不匹配的元素默认填充为None,我们可以使用fillvalue参数指定填充值。在使用zip_longest()函数之前,我们需要首先导入itertools模块。
import itertools
l1 = [1, 2, 3, 4, 5, 6, 7]
l2 = ['a', 'b', 'c']
for ele_l1, ele_l2 in itertools.zip_longest(l1,l2):
print(ele_l1, ele_l2)
输出
1 a
2 b
3 c
4 None
5 None
6 None
7 None
例子
在这个例子中,我们成功地并行迭代了3个列表。
import itertools
l1 = [1, 2, 3, 4, 5, 6, 7]
l2 = ['a', 'b', 'c', 'd', 'e']
l3 = [10, 11, 12, 13]
for ele_l1, ele_l2, ele_l3 in itertools.zip_longest(l1, l2, l3):
print(ele_l1, ele_l2, ele_l3)
输出
1 a 10
2 b 11
3 c 12
4 d 13
5 e None
6 None None
7 None None