我尝试了以下代码:
squared = (map(lambda x: x**2, items))
print(list(squared))
print(list(squared))
首先,它打印平方的列表,再次打印相同的内容,则打印一个空列表。我想知道背后的原因是什么。
答案 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以获得列表而不是迭代器。