【发布时间】:2019-10-09 13:12:23
【问题描述】:
从 Python 3.6 提示:
>>> [print(i) for i in range(3)]
0
1
2
[None, None, None]
【问题讨论】:
-
不要在列表理解中使用
print。做print([i for i in range(3)])
标签: python-3.x list list-comprehension
从 Python 3.6 提示:
>>> [print(i) for i in range(3)]
0
1
2
[None, None, None]
【问题讨论】:
print。做print([i for i in range(3)])
标签: python-3.x list list-comprehension
列表推导式创建一个列表,其中包含每次迭代计算表达式的结果。除了打印出你给它的任何东西的“副作用”之外,print 函数返回None,所以这就是存储在列表中的东西。
由于您在交互式控制台中,因此最后会打印出返回值。如果您将此作为脚本运行,则输出将不包括 [None, None, None]。
如果您想循环遍历0、1、2 并将它们打印出来,恐怕您必须将其作为正确的for-loop:
for i in range(3)
print(i)
虽然我完全理解使用列表理解的简洁单行语法的愿望! ?
正如其他人评论的那样,您可以通过构造列表(使用列表推导式)然后将其打印出来来实现相同的效果:
print(*[i for i in range(3)], sep="\n")
如果你想让它们在一个新的行上,你需要sep 参数;没有它,它们将在一行上,每行由一个空格分隔。
【讨论】:
当您将 print 语句放在那里时,它会打印每个值,然后打印其中没有值的列表。
>>> this = print([(i) for i in range(3)])
[0, 1, 2]
>>> print(this)
None
>>>
这应该会告诉您问题所在。你要使用的是
>>> [(i) for i in range(3)]
[0, 1, 2]
【讨论】: