2

打印列表时,使用此方法时出现语法错误:

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] 

不起作用。谁能给我一个线索?

4

6 回答 6

7

列表理解语法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])(对于生成器理解)。

于 2012-12-20T08:11:51.323 回答
2

在 Python 2 中,printis 是一个语句,而不是表达式或函数,因此您不能直接在推导式中使用它。使用这个技巧:

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

于 2012-12-20T08:14:23.953 回答
2

列表理解语法 ( ) 是用于生成列表[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")
于 2012-12-20T08:15:32.087 回答
1

作为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])允许作为一个表达式,作为一个函数调用,第一个参数是一个生成器表达式。)

于 2012-12-20T08:12:46.097 回答
1

这是无效的 python 语法。i for i in [1, 2, 3]仅在列表或生成器理解中有效,即。[]被或()分别包围。

你会想要使用:

print '\n'.join(str(i) for i in [1, 2, 3])
于 2012-12-20T08:13:55.293 回答
1

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]
于 2012-12-20T08:24:05.373 回答