首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python在尝试打印时返回一个生成器对象?

Python在尝试打印时返回一个生成器对象?
EN

Stack Overflow用户
提问于 2021-10-27 05:19:30
回答 4查看 309关注 0票数 0

所以我尝试使用列表理解来打印,我想在迭代中分别打印每个元素。有问题的代码:

代码语言:javascript
运行
复制
str1 = "You don't know how amazing it is to learn how to program!"

list1 = str1.split(" ")

print(i.upper() for i in list1 if len(i) > 5)

但当我尝试运行代码时,它会吐出:

代码语言:javascript
运行
复制
<generator object <genexpr> at 0x000001F4212233C0>

所需的输出将是:

代码语言:javascript
运行
复制
AMAZING
PROGRAM!

除了使用普通的for循环之外,我还能做些什么来在print()函数中使用一行代码来实现我想要的结果呢?

EN

回答 4

Stack Overflow用户

发布于 2021-10-27 05:23:07

表单

代码语言:javascript
运行
复制
(i.upper() for i in list1 if len(i) > 5)

是一个生成器表达式(一个genexpr)。它只有在迭代之后才会有值,而且print()本身不会迭代对象。(它只生成字符串,而<generator object <genexpr>>是生成器表达式的字符串形式。

要解决此问题,您有两个选项(除了使用列表理解):

  • 在genexpr上使用"\n".join()使其成为换行符连接的字符串: print("\n".join(i.upper() for i in list1 if len(i) > 5))

  • 您可以使用*运算符将生成器表达式拆分成print的参数,并告诉print用换行符分隔值: print(*(i.upper() for i in list1 if len(i) > 5),sep="\n")
票数 2
EN

Stack Overflow用户

发布于 2021-10-27 05:22:38

您可以将生成器表达式放在join()中,以单独打印一行中的每一项:

代码语言:javascript
运行
复制
print("\n".join(i.upper() for i in list1 if len(i) > 5))

这将产生所需的输出:

代码语言:javascript
运行
复制
AMAZING
PROGRAM!
票数 1
EN

Stack Overflow用户

发布于 2021-10-27 05:23:58

print语句中的代码将只返回一个生成器。如果您希望获得所需的输出,请尝试执行以下操作

代码语言:javascript
运行
复制
print([i.upper() for i in list1 if len(i) > 5])

代码语言:javascript
运行
复制
[print(i.upper()) for i in list1 if len(i) > 5]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69733124

复制
相关文章

相似问题

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