- 此问题在此处已有答案**:
Why can't I iterate twice over the same iterator? How can I "reset" the iterator or reuse the data?(5个答案)
四年前关闭了。
我是一个Python新手,正在读一本Python旧书,它基于Python 2,所以有时候我对细节有点困惑。
有一个密码
L=map(lambda x:2**x, range(7))
所以在python 3中它不返回列表,我搜索了一下,发现list(L
)可以工作。但问题是,一开始list(L)
工作正常,但当我再次使用它时,
list(L)
list(L)
第二个返回[ ]
有人能解释一下发生了什么吗?
2条答案
按热度按时间3wabscal1#
map
返回一个迭代器,因此,它的输出只能使用一次,如果你想把结果存储在一个列表中,就像Python 2.x一样,只要在使用map
时调用list
即可:列表
L
现在将包含您的结果,无论您调用它多少次。您所面临的问题是,一旦
map
迭代了一次,它将不会为后续的每个调用产生任何结果,因此您会看到第二个调用的空列表。如果你不能用尽迭代器但是想使用它两次,关于解决方法的更详细的解释和建议,请参见Why can't I iterate twice over the same data。
70gysomp2#
Python 3.x返回一个生成器对象:
您可以使用
list()
提取这些值,但生成器可能会耗尽。因此,随后使用list()
将导致空[]
,因为没有更多的值可供next()
调用访问。我建议您尝试使用生成器,或者在https://wiki.python.org/moin/Generators中阅读一些内容。希望这对您有所帮助