在Python 3和Python 2中映射

Sep*_*cle 6 python python-2.x python-3.x

我是一名Python新手,正在阅读一本旧的Python书。它基于Python 2,因此有时我对细节不甚了解。

有一个代码

L=map(lambda x:2**x, range(7))
Run Code Online (Sandbox Code Playgroud)

因此它不会在python 3中返回列表,因此我用google搜索并发现list(L)有效。但是问题是,首先list(L)可以正常工作,但是当我再次使用它时,

list(L)

list(L)
Run Code Online (Sandbox Code Playgroud)

第二回 [ ]

有人可以解释我发生了什么事吗?

jpp*_*jpp 5

map返回一个迭代器。因此,其输出只能使用一次。如果您希望以与Python 2.x相同的方式将结果存储在列表中,则在list使用时只需调用即可map

L = list(map(lambda x:2**x, range(7)))
Run Code Online (Sandbox Code Playgroud)

L现在,无论您调用多少次,列表都会包含您的结果。

您面临的问题是,一旦map迭代一次,它将在以后的每次调用中都不产生任何结果。因此,您将看到第二个呼叫的空列表。

如果您不能耗尽迭代器但希望使用两次,有关变通方法的更详细的解释和建议,请参阅为什么我不能对相同的数据进行两次迭代