首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环与map函数一起使用时返回空白输出。

循环与map函数一起使用时返回空白输出。
EN

Stack Overflow用户
提问于 2021-12-15 23:06:38
回答 2查看 50关注 0票数 0

我定义了一个factorial函数,如下所示:

代码语言:javascript
复制
def fact(n):
    return 1 if n < 2 else n * fact(n-1)

现在,我正在运行map函数,如下所示:

代码语言:javascript
复制
results = map(fact, range(1,5))
for x in results:
    print(x)

Output:
    1
    2
    6
    24

我完全理解上面的输出。但是,如果我再次运行相同的for循环,我将得到一个我无法理解的空白输出。

代码语言:javascript
复制
for x in results:
    print(x)

Output:
EN

回答 2

Stack Overflow用户

发布于 2021-12-15 23:10:18

这是因为在python3中,map函数返回一个迭代器。当你遍历生成器时,它就会变得疲惫和空,所以试图再次遍历它就像遍历空列表一样。

代码语言:javascript
复制
print(results) # <map object at 0x10a392310>

如果您想遍历它不止一次,您可以将它转换为列表。

代码语言:javascript
复制
results = list(map(fact, range(1,5)))
票数 1
EN

Stack Overflow用户

发布于 2021-12-15 23:11:36

results是一个map对象,是一个生成器。元素是在遍历map时生成的,并且当您开始新的迭代时它不会重置。

如果希望它表现为列表,可以显式地将map转换为如下所示的list

代码语言:javascript
复制
results = list(map(fact, range(1,5)))

或者使用列表理解代替map

代码语言:javascript
复制
results = [fact(n) for n in range(1, 5)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70371396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档