在 '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)
哪个会达到您的预期。
我有这两个列表
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)
哪个会达到您的预期。