如何使用括号在新行中打印列表元素?

3
假设有一个列表demo_list:
[u'demo', u'trial']

使用for循环打印每个元素并换行:

for i in demo_list:
    print(i)

它按照预期工作:

demo
trial

然而,我想使用括号来表示这个循环:
print([ i for i in demo_list]) 

但它会直接将整个列表打印在一行中:
[u'demo', u'trial']

对于表达式[print(i) for i in demo_list],它显示SyntaxError: invalid syntax

我的问题是:

  1. 如何使用括号将每个元素放在新行中?
  2. 表达式[print(i) for i in demo_list]有什么问题?

非常感谢您的帮助。


2
print('\n'.join(demo_list)) 怎么样?顺便说一下,[print(i) for i in demo_list] 对我来说是可以工作的,但这绝对是不被鼓励的。 - Ma0
@Ev.Kounis 谢谢您的回复,但它返回 [u'demo\ntrial']。顺便问一下,为什么 [print(i) for i in demo_list] 不被推荐使用?这种形式有什么缺点吗? - user2894829
奇怪.. type(demo_list) 返回什么? - Ma0
@Ev.Kounis type(demo_list) 返回 <type 'list'> - user2894829
1
@user2894829 因为列表推导式不是通用的循环工具。它们存在的目的是创建列表。在您的情况下,您正在使用它们内置的、创建列表的循环机制来进行 print 操作。这就像用叉子吃汤一样。 - Ma0
显示剩余3条评论
5个回答

1
在使用列表推导式(即方括号表达式)生成列表后,您可以尝试在join函数中使用"\n"换行符。
In [29]: demo_list = [u'demo', u'trial']   

In [30]: print("\n".join([ i for i in demo_list])) 
demo
trial

通常情况下,如果您已经有列表,就不需要使用列表推导式。使用换行符进行简单的连接操作即可。
In [31]: print("\n".join(demo_list)) 
demo
trial

2
为什么你需要使用推导式来完成这个任务? - Ahmad Khan
这不是必需的,但 OP 需要它,因为它说“然而,我想使用括号来表示这个循环:” - kmario23

1

这被称为列表推导式。在列表推导式中,您不能使用语句。如果您从这个角度看,这是显而易见的:

[assert x for x in lst]

# same as
[print x for x in lst]

在Python 2.7中,print不是一个函数,因此会出现SyntaxError。但是可以使用以下方法来解决:
l = [1,2,3]

def p(x):
    print(x)

map(p, l)
# or
[p(x) for x in l]

参考资料:列表推导式:为什么会出现语法错误?


1
你也可以这样做:

In [591]: from __future__ import print_function
In [592]: print(*demo_list,sep='\n')
demo
trial

1
你可以:

print(*[i for i in demo_list],sep='\n')

或者

print(*demo_list, sep='\n')

如果你使用的是 Python2.7,那么你应该使用 from __future__ import print_function


1
首先,根据错误信息显示,您没有使用Python 3,而是2.7x版本。因为您的代码可以在Python 3中运行。
在Python 2.7中,print不是函数,而是一个语句,其格式为print [,]*(方括号表示可选参数)。
此外,列表推导式是创建列表的一种方法。您可能会在末尾看到[None, None],所以最好将其分配给一个变量。
将您的列表推导式修改为:
def print_stmt(x):
    print x

a = [print_stmt(x) for x in ["demo", "trial"]]

这将打印为:

demo

trial


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接