Python|同时迭代多个列表
遍历单个列表,是指在特定步骤使用for 循环对单个列表的单个元素进行迭代,而在同时迭代多个列表时,我们指的是使用for 循环在特定步骤对多个列表的单个元素进行迭代.
一次迭代多个列表
为了更好地理解多个列表的迭代,我们一次迭代 3 个列表。
我们可以通过以下方式同时迭代列表:
- zip() :在Python 3 中, zip 返回一个迭代器。 zip()函数在所有列表中的任何一个用完时停止。简而言之,它一直运行到所有列表中最小的一个。
下面是 zip函数和迭代 3 个列表的 itertools.izip 的实现:
Python3
# Python program to iterate # over 3 lists using zip function import itertools num = [1, 2, 3] color = ['red', 'while', 'black'] value = [255, 256] # iterates over 3 lists and executes # 2 times as len(value)= 2 which is the # minimum among all the three for (a, b, c) in zip(num, color, value): print (a, b, c)
Python3
# Python program to iterate # over 3 lists using itertools.zip_longest import itertools num = [1, 2, 3] color = ['red', 'while', 'black'] value = [255, 256] # iterates over 3 lists and till all are exhausted for (a, b, c) in itertools.zip_longest(num, color, value): print (a, b, c)
Python3
# Python program to iterate # over 3 lists using itertools.zip_longest import itertools num = [1, 2, 3] color = ['red', 'while', 'black'] value = [255, 256] # Specifying default value as -1 for (a, b, c) in itertools.zip_longest(num, color, value, fillvalue=-1): print (a, b, c)
输出:1 red 255 2 while 256
- itertools.zip_longest() :当所有列表都用完时,zip_longest 停止。当较短的迭代器用尽时, zip_longest 产生一个具有 None 值的元组。
下面是迭代 3 个列表的 itertools.zip_longest 的实现:
Python3
# Python program to iterate # over 3 lists using itertools.zip_longest import itertools num = [1, 2, 3] color = ['red', 'while', 'black'] value = [255, 256] # iterates over 3 lists and till all are exhausted for (a, b, c) in itertools.zip_longest(num, color, value): print (a, b, c)
输出:1 red 255 2 while 256 3 black None
输出:
1 red 255 2 while 256 3 black None
我们还可以在 zip_longest() 中指定默认值而不是 None
Python3
# Python program to iterate
# over 3 lists using itertools.zip_longest
import itertools
num = [1, 2, 3]
color = ['red', 'while', 'black']
value = [255, 256]
# Specifying default value as -1
for (a, b, c) in itertools.zip_longest(num, color, value, fillvalue=-1):
print (a, b, c)
输出:
1 red 255
2 while 256
3 black -1
注意: Python 2.x 有两个额外的函数 izip() 和 izip_longest()。在Python 2.x 中, zip() 和 zip_longest() 用于返回列表,而 izip() 和 izip_longest() 用于返回迭代器。在Python 3.x 中,izip() 和 izip_longest() 不存在,因为 zip() 和 zip_longest() 返回迭代器。