我正在研究理解。我得到了print(x)部分(我认为。它打印了传递'in'测试的x的值),但是为什么它之后也会返回None列表?
>>> g
['a', 'x', 'p']
>>> [print(x) for x in g]
a
x
p
[None, None, None] #whats this?
答案 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