在 'lists' 和 'iterators' 中嵌套 for 循环

Nested for loop in 'lists' and 'iterators'

我有这两个列表

l1 = [1,2,3]
l2 = [10,20,30]

我使用这个嵌套的 for 循环来访问所有可能的对:

for a in l1:
    for b in l2:
        print(a,b)

我得到以下预期结果:

1 10
1 20
1 30
2 10
2 20
2 30
3 10
3 20
3 30

但是如果我将 l1 和 l2 转换为迭代器,我会得到不同的结果并且我无法访问所有对:

l1=iter(l1)
l2=iter(l2)

for a in l1:
    for b in l2:
        print(a,b)

1 10
1 20
1 30

我无法理解这两个代码片段之间的区别。为什么迭代器会产生这个结果?

l2=iter(l2)

这从 l2 中创建了一个迭代器。迭代器只能迭代一次。之后,interator 就完成了。如果您想再次迭代 l2,则需要从中创建另一个迭代器。

for a in l1:
    for b in l2:
        print(a,b)

这将尝试迭代 l2 - 对于 l1 中的每个项目一次。如果 l1 中有超过 1 个项目,那将不起作用 - 因为 l2 迭代器在第一次迭代后已经耗尽。

所以你需要这样的东西:

l1 = iter(l1)

for a in l1:
    l2_iter = iter(l2)
    for b in l2_iter:
        print(a,b)

哪个会达到您的预期。