【问题标题】:How to print map object with Python 3? [duplicate]如何使用 Python 3 打印地图对象? [复制]
【发布时间】:2017-11-11 16:38:38
【问题描述】:

这是我的代码

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>

我不确定,但我认为我的解决方案可以使用 Python 2.7,如何使用 3.5 进行更改?

【问题讨论】:

  • 在您的for 循环中,您每次都打印整个F_temps,而不是i
  • @AndrewJaffe 是的,你很聪明,必须改变它!
  • 你可以只使用 *,例如:print(*F_temps)

标签: python python-3.x


【解决方案1】:

你必须先把地图变成一个列表或元组。为此,

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

在 for 循环中使用 map 时,循环会自动为您调用 next,并将 StopIteration 错误视为循环结束。调用 list(mymap) 会强制评估所有地图值。

result = list(mymap) # prints 1, 2, 3

但是,由于我们的evaluate 函数没有返回值,所以result 就是[None, None, None]

【讨论】:

  • 我发现当我这样做时地图被归零。意思是执行上面的打印行两次,第二次你会得到一个空列表。这在命令行和 jupyter 中都发生在我身上。我认为这是因为地图被执行了。有什么想法吗?
  • @Kiki Jewell 试试:print(list(map(fahrenheit, temp)))
  • @spacedustpi 这是我们在 python 中打印地图的最佳方法 - 需要list(map(..)) ?
  • 是的,地图被归零,因为它仅供一次性使用。但是,如果您希望保存结果,请保存列表本身。然后,您可以根据需要多次重新打印或访问其元素。这类似于 Java 中 Streams 的行为:您只能使用 Stream 一次,之后您需要创建一个新流。对于上面的例子result = list(mymap) - 转载只需做print(result)
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 2017-12-23
  • 1970-01-01
  • 2020-06-27
  • 2017-07-28
  • 2016-02-25
  • 2013-08-25
  • 1970-01-01
相关资源
最近更新 更多