如何在Python中并行迭代两个列表?


在Python中,使用for循环通常迭代单个数据结构,例如列表,但是如果我们需要并行迭代两个或多个列表呢?在本文中,我们将看到并行迭代两个或多个列表的不同方法。

通过使用range()函数,我们可以并行迭代两个列表。让我们看看下面的例子以及如何在python中迭代两个列表。

使用for循环(如果两个列表长度相同)

假设两个列表的长度相同,这里我们使用len()方法获取列表对象的长度。

示例

Open Compiler
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循环。

示例

Open Compiler
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。

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

使用zip()函数

zip()函数是Python内置函数,它返回一个zip对象,该对象表示元组的迭代器。zip()函数运行到所有可迭代对象中最小的一个。

示例

Open Compiler
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模块。

Open Compiler
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个列表。

Open Compiler
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

更新于:2023年8月24日

673 次浏览

启动你的职业生涯

完成课程获得认证

开始
广告