列表理解返回值加[无,无,无],为什么?

时间:2013-08-12 17:37:36

标签: python python-3.x

我正在研究理解。我得到了print(x)部分(我认为。它打印了传递'in'测试的x的值),但是为什么它之后也会返回None列表?

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

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

4 个答案:

答案 0 :(得分:18)

print是一个函数(在Python3中)。它会在屏幕上打印一些内容,但会返回无。

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

答案 1 :(得分:7)

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

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

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

现在列表在x中并且未打印。名单还在那里......

>>> print(x)
[None, None, None]
>>> x
[None, None, None]

答案 2 :(得分:2)

[print(x) for x in g]

相当于:

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

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

答案 3 :(得分:0)

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

list comprehension 总是生成新列表。可以生成与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'

要打印它,只需使用连接所需的分隔符:

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

如果列表的元素与字符串的连接不兼容,则需要使用理解:

>>> 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