【问题标题】:Why does Python list comprehension print a list of "None"s in the end?为什么 Python 列表理解最后会打印一个“无”列表?
【发布时间】: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


【解决方案1】:

列表推导式创建一个列表,其中包含每次迭代计算表达式的结果。除了打印出你给它的任何东西的“副作用”之外,print 函数返回None,所以这就是存储在列表中的东西。

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

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

for i in range(3)
    print(i)

虽然我完全理解使用列表理解的简洁单行语法的愿望! ?


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

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

如果你想让它们在一个新的行上,你需要sep 参数;没有它,它们将在一行上,每行由一个空格分隔。

【讨论】:

    【解决方案2】:

    当您将 print 语句放在那里时,它会打印每个值,然后打印其中没有值的列表。

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

    这应该会告诉您问题所在。你要使用的是

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多