This question already has an answer here:
Python: calling 'list' on a map object twice

(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/

10-13 09:14
查看更多