打印列表时,使用此方法时出现语法错误:
print i for i in [1,2,3]
我知道使用此方法时可以:
for i in [1, 2, 3]:
print i
我知道
(i for i in [1, 2, 3])
是一个生成器对象,但我就是不明白为什么
print i for i in [1, 2, 3]
不起作用。谁能给我一个线索?
打印列表时,使用此方法时出现语法错误:
print i for i in [1,2,3]
我知道使用此方法时可以:
for i in [1, 2, 3]:
print i
我知道
(i for i in [1, 2, 3])
是一个生成器对象,但我就是不明白为什么
print i for i in [1, 2, 3]
不起作用。谁能给我一个线索?
列表理解语法x for x in ...
需要括号括起来。这是 Python 的句法规则,就像需要缩进,或者后面需要冒号if
等等。 i for i in [1, 2, 3]
本身不是有效的语法。您需要[i for i in [1, 2, 3]]
(对于列表理解)或(i for i in [1, 2, 3])
(对于生成器理解)。
在 Python 2 中,print
is 是一个语句,而不是表达式或函数,因此您不能直接在推导式中使用它。使用这个技巧:
def f(x): print x
[f(i) for i in [1,2,3]]
请注意,这(f(i)...)
不起作用,因为这只会创建一个生成器,f()
如果您对其进行迭代,它将调用该生成器。列表推导[]
实际上调用f()
.
[编辑]如果您使用 Python > 2.6,您可以使用
from __future__ import print_function
[print(i) for i in [1, 2, 3]]
注意()
周围的论点print
。
列表理解语法 ( ) 是用于生成列表[expression for loop]
的速记循环语法。
您没有生成列表,而是要循环打印项目。由于您没有生成 python 列表,因此您必须使用常规循环。
或者,由于您所做的只是在单独的行上打印项目,因此只需自己添加换行符:
print '\n'.join(i for i in [1, 2, 3])
这会产生与以下内容相同的输出:
for i in [1, 2, 3]:
print i
如果您使用 Python 3,或者from __future__ import print
在模块顶部使用并使用print()
function,您可以在一次调用中将所有值发送到函数,并告诉print()
在两者之间使用换行符:
values = [1, 2, 3]
print(*values, sep="\n")
作为expression
(在语法中):
[i for i in [1, 2, 3]]
是一个列表理解。(i for i in [1, 2, 3])
是一个生成器表达式。i for i in [1, 2, 3]
它本身就是一个语法错误,事实就是如此。周围一定有什么东西。除非你有它(
或[
在它附近,否则它不是有效的expression
,因为此时for
关键字无效。在print 语句中,它需要一个expression
.
(作为一个红鲱鱼,func(i for i in [1, 2, 3])
允许作为一个表达式,作为一个函数调用,第一个参数是一个生成器表达式。)
这是无效的 python 语法。i for i in [1, 2, 3]
仅在列表或生成器理解中有效,即。[]
被或()
分别包围。
你会想要使用:
print '\n'.join(str(i) for i in [1, 2, 3])
Print 不是一个函数,它是一个语句,你不能在表达式中使用它们。只需使用常规循环,因为您不想生成列表,而列表推导会这样做。从理论上讲,您可以这样做(根本不应该这样做):
from __future__ import print_function
[print(my_item) for my_item in [1,2,3,4]]
1
2
3
4
Out[26]:
[None, None, None, None]