繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM