与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循环返回空白输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS 与 MySQL - 返回空白数组

Go语言 | 02 for循环及常用函数的使用

Go语言 | 02 for循环及常用函数的使用

for、forEach、map的性能对比

for of 与 for in 的区别

for of 与 for in的区别