刚刚了解到,map()
返回的对象在in
表达式中使用或转换为列表后不会保留。
是什么导致b
最后被清空?
>>> a = [1, 2, 3]
>>> b = map(lambda x: x, a)
>>> b
<map object at 0x104d8ccc0>
>>> list(b)
[1, 2, 3]
>>> list(b)
[]
答案 0 :(得分:3)
map
输出一个迭代器,该迭代器在某些迭代器(lambda x: x
)上应用函数(a
)。结果,b
是一个迭代器。首次调用list(b)
时,迭代器b
被调用多次,直到到达终点为止。之后,b
是一个迭代器,没有任何可生成的项。因此,当您第二次调用list(b)
时,它会输出一个空列表。
答案 1 :(得分:1)
map
的{{3}}指定返回“迭代器”,而不是“迭代器”。 Python为documentation定义了一个迭代器;一旦到达终点,便再也不会返回其他项目。
第二次执行list(b)
试图从已经在末尾的迭代器构建列表,因此它不返回任何项目,并且构造了一个空列表。
答案 2 :(得分:-2)
每当您调用list(b)
时,都在其中使用迭代器,然后如果要存储b
作为b
使用,则清除变量list
a = [1、2、3]
b =列表(map(lambda x:x,a))
打印(b)
[1、2、3] 打印(* b) 1 2 3 希望对您有所帮助。
编辑:修复了我的错误。