8

我正在研究理解。我得到了 print(x) 部分(我认为。它打印通过“in”测试的 x 的值)但是为什么它之后还返回一个 None 列表?

>>> g
['a', 'x', 'p']

>>> [print(x) for x in g]
a
x
p
[None, None, None] #whats this? 
4

4 回答 4

21

print是一个函数(在 Python3 中)。它在屏幕上打印一些东西,但返回None。

在 Python2 中,print是一个语句。[print(x) for x in g]会引发 SyntaxError,因为列表推导中只能使用表达式,而不是语句。函数调用是一个表达式,这就是 Python3 允许使用它的原因。但正如您所看到的,在列表推导中使用它并不是很有用print,即使它是允许的。

于 2013-08-12T17:38:29.563 回答
9

您使用列表推导来打印列表中的项目,然后打印列表本身。尝试将列表分配给变量。

>>> g
['a', 'x', 'p']

>>> x = [print(x) for x in g]
a
x
p
#

现在列表在 x 中并且没有打印。名单还在……

>>> print(x)
[None, None, None]
>>> x
[None, None, None]
于 2013-08-12T17:40:24.717 回答
2
[print(x) for x in g]

相当于:

l = []
for i in g:
    l.append(print(i))
return l

Print 执行打印操作,因此您会看到 a、x 和 p,但它会返回None,因此您最终得到的列表是 [None, None, None]

于 2013-08-12T17:40:12.520 回答
1

我认为您将列表理解与str.join方法混为一谈。

列表推导 总是产生一个新列表。可以产生与以下相同的三种方式列表g

>>> [x for x in 'axp']
['a', 'x', 'p']
>>> [x[0] for x in ['alpha', 'xray', 'papa']]
['a', 'x', 'p']
>>> list('axp')
['a', 'x', 'p']

由于g已经是字符串,因此您可以使用 join 生成单个字符串来打印它:

>>> g=['a', 'x', 'p']
>>> ''.join(g)
'axp'

要打印它,只需将 join 与所需的分隔符一起使用:

>>> print('\n'.join(g))
a
x
p

如果列表的元素与 join 不兼容,则需要使用理解:

>>> li=[1,2,3]
>>> '\n'.join(li)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>> print('\n'.join(str(e) for e in li))
1
2
3
于 2013-08-12T18:13:38.583 回答