如何在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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP