【发布时间】:2020-06-28 07:18:21
【问题描述】:
我有这两个列表
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
我无法理解这两个代码 sn-ps 之间的区别。为什么迭代器会产生这个结果?
【问题讨论】:
-
一旦你使用了迭代器,它就完成了。没有更多的价值给你。在第一个
for b in l2:之后,井是干的。 -
我知道这不像 看起来 重复,但这是我可以轻松找到的最接近的匹配这个常见问题。
iter创建的序列迭代器与open创建的文件迭代器具有相同的相关行为。 -
@KarlKnechtel -实际上...文件可以倒带(例如,
file.seek(0))。他们是一个反例。iter()本身并不关心你得到哪种类型的迭代器。list_iterator不能倒带,文件可以。 -
他们可以,但重点在于具体的迭代风格。
-
@KarlKnechtel- 是的,这是因为阅读器对象是迭代器,就像 open() 返回的文件对象一样。
标签: python list iterator nested-loops