为什么Python列表理解会最终打印出“无”列表?

时间:2019-10-09 13:12:23

标签: python-3.x list list-comprehension

在Python 3.6提示符下:

>>> [print(i) for i in range(3)]
0
1
2
[None, None, None]

2 个答案:

答案 0 :(得分:2)

列表推导会创建一个列表,其中包含每次迭代的表达式求值结果。除了打印出所提供内容的“副作用”之外,print函数还返回None,因此存储在列表中。

由于您处于交互式控制台中,因此返回值将在末尾打印出来。如果您将此脚本作为脚本运行,则输出将不包含[None, None, None]

如果您想遍历012并打印出来,恐怕您必须将其作为正确的for循环:

for i in range(3)
    print(i)

尽管我完全理解使用列表理解的整洁的单行语法的愿望! ?


正如其他人所评论的那样,您可以通过构造列表(使用列表推导)然后将其打印出来来达到相同的效果:

print(*[i for i in range(3)], sep="\n")

如果希望每个参数都换行,则需要sep参数;没有它,它们将在一行上,每行之间用空格隔开。

答案 1 :(得分:1)

将打印语句放在此处时,它会打印每个值,然后打印其中没有值的列表。

>>> this = print([(i) for i in range(3)])
[0, 1, 2]
>>> print(this)
None
>>> 

这应该向您显示问题。您要使用的是

>>> [(i) for i in range(3)]
[0, 1, 2]