This question already has an answer here:
Python: calling 'list' on a map object twice
(1个答案)
2年前关闭。
我是一名Python新手,正在阅读一本旧的Python书。它基于Python 2,因此有时我对细节不甚了解。
有一个代码
因此它不会在python 3中返回该列表,因此我对其进行了Google搜索,发现
但是问题是,首先
但是当我再次使用它时,
第二个返回
有人可以解释我发生了什么事吗?
现在,列表
您面临的问题是,一旦
有关无法解决迭代器但希望使用两次的替代方法的详细说明和建议,请参阅Why can't I iterate twice over the same data。
(1个答案)
2年前关闭。
我是一名Python新手,正在阅读一本旧的Python书。它基于Python 2,因此有时我对细节不甚了解。
有一个代码
L=map(lambda x:2**x, range(7))
因此它不会在python 3中返回该列表,因此我对其进行了Google搜索,发现
list(L
)有效。但是问题是,首先
list(L)
可以正常工作,但是当我再次使用它时,
list(L)
list(L)
第二个返回
[ ]
有人可以解释我发生了什么事吗?
最佳答案
map
返回一个迭代器。因此,其输出只能使用一次。如果您希望以与Python 2.x相同的方式将结果存储在列表中,则在使用list
时只需调用map
:
L = list(map(lambda x:2**x, range(7)))
现在,列表
L
将包含您的结果,无论您调用它多少次。您面临的问题是,一旦
map
进行了一次迭代,则每次后续调用都不会产生任何结果。因此,您会看到第二个调用的空白列表。有关无法解决迭代器但希望使用两次的替代方法的详细说明和建议,请参阅Why can't I iterate twice over the same data。
关于python - 在Python 3和Python 2中进行映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50671360/