所以我尝试使用列表理解来打印,我想在迭代中分别打印每个元素。有问题的代码:
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()函数中使用一行代码来实现我想要的结果呢?
发布于 2021-10-27 05:23:07
表单
(i.upper() for i in list1 if len(i) > 5)是一个生成器表达式(一个genexpr)。它只有在迭代之后才会有值,而且print()本身不会迭代对象。(它只生成字符串,而<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")发布于 2021-10-27 05:22:38
您可以将生成器表达式放在join()中,以单独打印一行中的每一项:
print("\n".join(i.upper() for i in list1 if len(i) > 5))这将产生所需的输出:
AMAZING
PROGRAM!发布于 2021-10-27 05:23:58
print语句中的代码将只返回一个生成器。如果您希望获得所需的输出,请尝试执行以下操作
print([i.upper() for i in list1 if len(i) > 5])或
[print(i.upper()) for i in list1 if len(i) > 5]https://stackoverflow.com/questions/69733124
复制相似问题