如何多次打印存储在变量中的map()对象结果



最近我正在尝试打印map()结果的方法,在那里我遇到了*

我试过这个:

>>> def inc(x):
...     return x+1
...
>>> a = map(inc,[1,2,3,4,5])
>>> print(*a)
2 3 4 5 6
>>> print(*a)

这里,通过函数inc(),我将映射对象结果存储在a中。在使用CCD_ 5打印时,我得到了想要的输出。第二次运行命令不会打印出任何结果。为什么?

我想知道a发生了什么,并尝试检查a:的type()

>>> type(a)
<class 'map'>

但似乎一切都很好。那么,为什么我不能再次使用print(*a)命令打印结果呢?即使当我尝试使用[i for i in a]打印时,第一次可能,第二次不可能,它也会让我使用[]。问题出在哪里?

map对象可以被认为是某个数据序列上的迭代器。简而言之,每次应用next时,map对象都会应用您指定的函数。它不存储结果。

因此,使用*,您可以有效地将next应用于a,直到StopIteration,这意味着您可以有效地在数据中应用inc函数。

之后,您应该重新初始化map。或者,您可以使用tee

https://docs.python.org/3/library/itertools.html#itertools.tee

如果您想将map的结果存储在容器中,那么您可以根据map的结果初始化list,例如

l = list(map(inc, [1, 2, 3, 4]))

这相当于调用*a,但结果会传递给list构造函数,然后分配给变量l

最新更新