如何在 Python 中循环浏览多个列表

mo abdelazim 2023年1月30日 2020年9月19日
  1. Python 3.x 中的 zip() 函数
  2. Python 2.x 中的 zip() 函数
如何在 Python 中循环浏览多个列表

本教程解释了如何在 Python 中同时迭代两个列表/元组。我们将使用 zip()itertools.zip_longest(),并解释它们之间的区别以及如何使用每一个。我们还将看到在 Python 2 和 3 中,zip() 的返回类型有什么不同。

Python 3.x 中的 zip() 函数

zip() 函数接受多个列表/元组作为参数,并返回一个 zip 对象,它是元组的迭代器。

使用 zip() 在两个列表中进行迭代

将两个列表传递给 zip() 函数,并使用 for 循环来迭代结果迭代器。

listA = [1,2,3,4]
listB = [10,20,30,40]

for a,b in zip(listA,listB):
    print(a,b)

输出:

1 10
2 20
3 30
4 40

使用 zip() 迭代两个不同长度的列表

如果列表的长度不同,zip() 会在最短的列表结束时停止。请看下面的代码。

listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a,b in zip(listA,listB):
    print(a,b)

输出:

1 10
2 20
3 30
4 40

使用 itertools.zip_longest() 来迭代两个列表

如果你需要遍历两个列表,直到最长的一个结束,使用 itertools.zip_longest()。它的工作原理和 zip() 函数一样,只是在最长的列表结束时停止。

它用 None 填充空值,并返回一个元组的迭代器。

import itertools

listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a,b in itertools.zip_longest(listA,listB):
    print(a,b)

输出:

1 10
2 20
3 30
4 40
5 None
6 None

默认的 fillvalue 是 None,但你可以将 fillvalue 设置为任何值。

import itertools

listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a,b in itertools.zip_longest(listA,listB,fillvalue=0):
    print(a,b)

输出:

1 10
2 20
3 30
4 40
5 0
6 0

使用 zip() 来处理多个列表

zip() 及其同级函数可以接受两个以上的列表。

import itertools

codes = [101,102,103]
students = ["James","Noah","Olivia"]
grades = [65,75,80]

for a,b,c in itertools.zip_longest(codes,students,grades,fillvalue=0):
    print(a,b,c)

输出:

101 James 65
102 Noah 75
103 Olivia 80

Python 2.x 中的 zip() 函数

zip() 函数在 Python 2.x 中也接受多个列表/元组作为参数,但返回一个元组列表。这对于小的列表来说很好,但是如果你有巨大的列表,你应该使用 itertools.izip() 来代替,因为它返回一个元组的迭代器。

使用 itertools.izip() 来迭代两个列表

import itertools

listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]

for a,b in itertools.izip(listA,listB):
    print(a,b)

输出:

1 10
2 20
3 30
4 40

相关文章 - Python List