如何在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。
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()函数运行到所有可迭代对象中最小的一个。
示例
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
广告