地图输出列表破坏了地图结果

时间:2019-03-27 13:07:56

标签: python list iterator map-function

我尝试了以下代码:

squared = (map(lambda x: x**2, items))
print(list(squared))
print(list(squared))

首先,它打印平方的列表,再次打印相同的内容,则打印一个空列表。我想知道背后的原因是什么。

3 个答案:

答案 0 :(得分:1)

map返回一个迭代器,该迭代器只能按照https://docs.python.org/3/library/stdtypes.html#typeiter进行一次迭代。

答案 1 :(得分:0)

正如其他人提到的那样,您创建的迭代器只能使用一次,因此可以保存结果并重复使用。

items = [0,1,2,3,4,5,6,7,8,9]

squared = (map(lambda x: x**2, items))
abc = list(squared)
print(abc)
print(abc)
print(abc)
print(abc)

作为旁注,您应该像我输入的那样为问题中的items定义。这将使我们能够复制粘贴整个代码,并快速查看正在发生的事情,而不会出错

答案 2 :(得分:0)

在Python 3中,map返回一个迭代器,您只能迭代一次。如果您第二次迭代迭代器,它将立即引发Stop Iteration,就好像它是空的一样。 max消耗整个对象,而min则将迭代器视为空。如果需要多次使用元素,则需要调用list以获得列表而不是迭代器。