python 为什么将迭代器转换为列表,将迭代器移动到最后一个索引[重复]

xe55xuns  于 2023-01-08  发布在  Python
关注(0)|答案(1)|浏览(94)
    • 此问题在此处已有答案**:

Why can't I iterate twice over the same iterator? How can I "reset" the iterator or reuse the data?(5个答案)
六年前关闭了。
把iter.转换成list好像把iter索引移到了最后一个元素,为什么?

l = iter([1, 2, 3])
x = list(l)
print l.next()

错误信息:
Traceback (most recent call last): print l.next()
停止迭代

z31licg0

z31licg01#

因为首先,你要创建一个新对象;其次,迭代器对象在内存中没有它的所有项,它按需生成项,一旦你到达了末尾,就没有回头路了。这就是为什么他们称它为一次性可迭代的。因此,当你在迭代器上调用list时,你是在通过消耗迭代器并将其项保留在列表中来创建新的列表对象。
为了更好地演示,它执行如下操作:

In [8]: l = iter([1, 2, 3])

In [9]: x = [item for item in l]

In [10]: x
Out[10]: [1, 2, 3]

相关问题