Python 3中的Map与Python 2中的Map[重复]

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

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)

第二个返回[ ]
有人能解释一下发生了什么吗?

3wabscal

3wabscal1#

map返回一个迭代器,因此,它的输出只能使用一次,如果你想把结果存储在一个列表中,就像Python 2.x一样,只要在使用map时调用list即可:

L = list(map(lambda x:2**x, range(7)))

列表L现在将包含您的结果,无论您调用它多少次。
您所面临的问题是,一旦map迭代了一次,它将不会为后续的每个调用产生任何结果,因此您会看到第二个调用的空列表。
如果你不能用尽迭代器但是想使用它两次,关于解决方法的更详细的解释和建议,请参见Why can't I iterate twice over the same data

70gysomp

70gysomp2#

Python 3.x返回一个生成器对象:

$ python3 -c "print(map(lambda x: 2**x, range(7)))" 
<map object at 0x104203208>

您可以使用list()提取这些值,但生成器可能会耗尽。因此,随后使用list()将导致空[],因为没有更多的值可供next()调用访问。我建议您尝试使用生成器,或者在https://wiki.python.org/moin/Generators中阅读一些内容。希望这对您有所帮助

相关问题