📜  Python|同时迭代多个列表

📅  最后修改于: 2022-05-13 01:55:52.098000             🧑  作者: Mango

Python|同时迭代多个列表

遍历单个列表,是指在特定步骤使用for 循环对单个列表的单个元素进行迭代,而在同时迭代多个列表时,我们指的是使用for 循环在特定步骤对多个列表的单个元素进行迭代.

一次迭代多个列表

为了更好地理解多个列表的迭代,我们一次迭代 3 个列表。

我们可以通过以下方式同时迭代列表:

  1. 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
    
  2. 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() 返回迭代器。