You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为何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

火山引擎 最新活动