关于python:列表理解返回值加上[None, None, None],为什么?

List comprehension returning values plus [None, None, None], why?

本问题已经有最佳答案,请猛点这里访问。

我在学习理解。我得到了打印(X)部分。它会打印通过"in"测试的x值),但为什么之后它还会返回一个"none"列表?

1
2
3
4
5
6
7
8
>>> g
['a', 'x', 'p']

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


print是一个函数(在python3中)。它将某些内容打印到屏幕上,但不返回任何内容。

在python2中,print是一个语句。[print(x) for x in g]会引发语法错误,因为只有表达式(而不是语句)可以用于列表理解。函数调用是一个表达式,这就是为什么python3中允许使用它的原因。但正如您所看到的,在列表理解中使用print并不是很有用,即使它是允许的。


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

1
2
3
4
5
6
7
8
>>> g
['a', 'x', 'p']

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

现在列表为x,不打印。名单还在那里…

1
2
3
4
>>> print(x)
[None, None, None]
>>> x
[None, None, None]


1
[print(x) for x in g]

相当于:

1
2
3
4
l = []
for i in g:
    l.append(print(i))
return l

print做打印工作,所以你看到a,x和p,但它返回None,所以你最后得到的列表是[无,无,无]


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

列表理解总是产生一个新的列表。可以生成三种方法列表,与g相同。

1
2
3
4
5
6
>>> [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生成单个字符串来打印它:

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

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

1
2
3
4
5
>>> print('
'
.join(g))
a
x
p

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

1
2
3
4
5
6
7
8
9
10
11
>>> li=[1,2,3]
>>> '
'
.join(li)
Traceback (most recent call last):
  File"<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>> print('
'
.join(str(e) for e in li))
1
2
3