[英]python print returns generator object instead of object itself
[英]Python returns a generator object when trying to print?
所以我试图使用列表理解来打印,我想在迭代中单独打印每个元素。 有问题的代码:
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)
但是当我尝试运行代码时,它会吐出:
<generator object <genexpr> at 0x000001F4212233C0>
所需的输出将是:
AMAZING
PROGRAM!
除了使用普通的 for 循环之外,我可以在这里做什么来仅使用 print() 函数内的一行代码来实现我想要的?
您可以将生成器表达式放在join()
以单独在一行上打印每个项目:
print("\n".join(i.upper() for i in list1 if len(i) > 5))
产生所需的输出:
AMAZING
PROGRAM!
表格
(i.upper() for i in list1 if len(i) > 5)
是一个生成器表达式( genexpr
)。 在迭代之前它不会有值,并且print()
本身不会迭代对象。 (它只是从它们中<generator object <genexpr>>
字符串,而<generator object <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")
打印语句中的代码将只返回一个生成器。 如果您想获得所需的输出,请尝试执行
print([i.upper() for i in list1 if len(i) > 5])
或者
[print(i.upper()) for i in list1 if len(i) > 5]
您可以尝试在数组中获取输出
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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.