在Python 3.6提示符下:
>>> [print(i) for i in range(3)]
0
1
2
[None, None, None]
答案 0 :(得分:2)
列表推导会创建一个列表,其中包含每次迭代的表达式求值结果。除了打印出所提供内容的“副作用”之外,print
函数还返回None
,因此存储在列表中。
由于您处于交互式控制台中,因此返回值将在末尾打印出来。如果您将此脚本作为脚本运行,则输出将不包含[None, None, None]
。
如果您想遍历0
,1
,2
并打印出来,恐怕您必须将其作为正确的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]