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

mo abdelazim 2023年1月30日
  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