我正在研究理解。我得到了 print(x) 部分(我认为。它打印通过“in”测试的 x 的值)但是为什么它之后还返回一个 None 列表?
>>> g
['a', 'x', 'p']
>>> [print(x) for x in g]
a
x
p
[None, None, None] #whats this?
我正在研究理解。我得到了 print(x) 部分(我认为。它打印通过“in”测试的 x 的值)但是为什么它之后还返回一个 None 列表?
>>> g
['a', 'x', 'p']
>>> [print(x) for x in g]
a
x
p
[None, None, None] #whats this?
print
是一个函数(在 Python3 中)。它在屏幕上打印一些东西,但返回None。
在 Python2 中,print
是一个语句。[print(x) for x in g]
会引发 SyntaxError,因为列表推导中只能使用表达式,而不是语句。函数调用是一个表达式,这就是 Python3 允许使用它的原因。但正如您所看到的,在列表推导中使用它并不是很有用print
,即使它是允许的。
您使用列表推导来打印列表中的项目,然后打印列表本身。尝试将列表分配给变量。
>>> g
['a', 'x', 'p']
>>> x = [print(x) for x in g]
a
x
p
#
现在列表在 x 中并且没有打印。名单还在……
>>> print(x)
[None, None, None]
>>> x
[None, None, None]
[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]
我认为您将列表理解与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