映射输出列表会破坏映射结果



我尝试了以下代码:

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

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

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

正如其他人提到的,您创建的迭代器只能使用一次,因此保存结果并重用这是要走的路。

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有一个定义。 这将使我们能够复制粘贴您的整个代码并快速查看正在发生的事情,而不是出现错误。

在 Python 3 中,map 返回一个迭代器,你只能迭代一次。如果再次迭代迭代器,它将立即引发"停止迭代",就好像它是空的一样。Max 消耗了整个东西,而 min 认为迭代器是空的。如果需要多次使用这些元素,则需要调用 list 来获取列表而不是迭代器。

最新更新