如何使用Python 3打印地图对象?

如何使用Python 3打印地图对象?,python,python-3.x,Python,Python 3.x,这是我的密码 def fahrenheit(T): return ((float(9)/5)*T + 32) temp = [0, 22.5, 40,100] F_temps = map(fahrenheit, temp) 这是mapobject,所以我尝试了类似的方法 for i in F_temps: print(F_temps) <map object at 0x7f9aa050ff28> <map object at 0x7f9aa050ff28&

这是我的密码

def fahrenheit(T):
    return ((float(9)/5)*T + 32)

temp = [0, 22.5, 40,100]
F_temps = map(fahrenheit, temp)
这是mapobject,所以我尝试了类似的方法

for i in F_temps:
    print(F_temps)

<map object at 0x7f9aa050ff28>
<map object at 0x7f9aa050ff28>
<map object at 0x7f9aa050ff28>
<map object at 0x7f9aa050ff28>
F_temps中的i的
:
打印(F_temps)

我不确定,但我认为我的解决方案在Python2.7中是可行的,如何在3.5中改变这一点?

您必须首先将映射转换为列表或元组。为此,

print(list(F_temps))
这是因为地图的评估是惰性的,这意味着这些值只能按需计算。让我们看一个例子

def evaluate(x):
    print(x)

mymap = map(evaluate, [1,2,3]) # nothing gets printed yet
print(mymap) # <map object at 0x106ea0f10>

# calling next evaluates the next value in the map
next(mymap) # prints 1
next(mymap) # prints 2
next(mymap) # prints 3
next(mymap) # raises the StopIteration error

但是,由于我们的
求值
函数没有返回值,
结果
只是
[None,None,None]

for
循环中,您每次都在打印整个
F_temps
,而不是
i
@安德烈谢夫是的,你是赖特,必须改变这一点!您可以使用*,例如:
print(*F_temps)
我发现当我这样做时,地图会被调零。意思是执行上面的打印行两次,第二次将得到一个空列表。这在命令行和jupyter中都会发生。我想这是因为映射被执行了。有什么想法吗?@Kiki-Jewell-Try:print(list(map(fahrenheit,temp)))@spacedustpi这是我们用python打印地图所能做的最好的方法了-需要
list(map(…)
?是的,地图归零,因为它只用于一次使用。但是,如果要保存结果,请保存列表本身。然后,您可以根据需要多次重印或访问其元素。这类似于Java中流的行为:您只能使用一次流,然后需要创建一个新流。对于上面的示例
result=list(mymap)
-要重新打印,只需执行
print(result)
result = list(mymap) # prints 1, 2, 3