为何Python中调用map方法返回map object?如何解决该问题?
Python中调用map()输出map object的原因及解决方法
嘿,这个问题我当初刚从Python 2切换到Python 3的时候也踩过坑,一开始还懵了好一会儿!
为什么会输出map object?
在Python 3里,map()函数不再像Python 2那样直接返回一个列表了,它返回的是一个迭代器对象(也就是你看到的<map object at ...>)。这么设计是为了节省内存——它不会一次性把所有处理后的结果都生成并存储起来,而是等你需要的时候才逐个生成元素,这种“惰性求值”的方式在处理大量数据的时候优势特别明显。
你看你的示例代码:
f = ['a', 'b', 'c', 'd', 'e', 'f', 10, 20, 30] g = map(lambda v: v*2, f) print(g)
这里g就是这个惰性迭代器,直接打印它只会显示它的对象标识,不会输出实际处理后的内容。
怎么解决?
有几种简单的方法可以拿到你想要的实际结果:
转换成列表(最常用):用
list()把map对象包裹起来,这样就能把迭代器里的元素一次性提取出来变成列表:f = ['a', 'b', 'c', 'd', 'e', 'f', 10, 20, 30] g = list(map(lambda v: v*2, f)) print(g) # 输出: ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 20, 40, 60]直接遍历迭代器:如果不需要把所有结果存起来,只是想逐个处理或打印,可以用for循环遍历:
f = ['a', 'b', 'c', 'd', 'e', 'f', 10, 20, 30] g = map(lambda v: v*2, f) for item in g: print(item) # 会逐个输出: aa, bb, cc...20,40,60转换成其他可迭代对象:如果你需要元组或者集合,也可以用
tuple(g)转成元组,set(g)转成集合(不过集合会自动去重,使用的时候要注意场景)。
内容的提问来源于stack exchange,提问作者Encode.to.code




