与map函数结合使用时,for循环返回空白输出[重复]
Posted
技术标签:
【中文标题】与map函数结合使用时,for循环返回空白输出[重复]【英文标题】:For loop returning blank output when used in conjunction with map function [duplicate] 【发布时间】:2022-01-19 02:15:27 【问题描述】:我定义了一个factorial
函数,如下所示:
def fact(n):
return 1 if n < 2 else n * fact(n-1)
现在,我正在运行map
函数如下:
results = map(fact, range(1,5))
for x in results:
print(x)
Output:
1
2
6
24
我完全理解上面的输出。但是,如果我再次运行相同的 for 循环,我会得到一个我无法理解的空白输出。
for x in results:
print(x)
Output:
【问题讨论】:
【参考方案1】:results
是一个map
对象,它是一个生成器。元素是在您遍历 map
时生成的,并且在您开始新的迭代时不会重置。
如果你想让它表现得像一个列表,你可以像这样显式地将map
转换为list
:
results = list(map(fact, range(1,5)))
或者只使用列表推导而不是 map
:
results = [fact(n) for n in range(1, 5)]
【讨论】:
【参考方案2】:那是因为在 python3 中,map 函数返回一个iterator。当你遍历生成器时,它会变得疲惫和空虚,所以再次尝试遍历它就像遍历空列表一样。
print(results) # <map object at 0x10a392310>
如果你想多次遍历它,你可以将它转换为列表
results = list(map(fact, range(1,5)))
【讨论】:
以上是关于与map函数结合使用时,for循环返回空白输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章