【问题标题】:For loop prints NoneFor 循环打印 无
【发布时间】:2018-06-01 07:07:09
【问题描述】:

我有一个包含元组的列表:

my_list = [('a', 1), ('b', 2), ('c', 3)]

当我想使用 inline for 循环打印每个列表项时:

[print(i) for i in my_list]

我明白了:

('a', 1)
('b', 2)
('c', 3)
[None, None, None]

为什么输出还包含 [None, ...] 语句?

【问题讨论】:

  • 因为print(i) 返回None
  • 如果您想打印列表,只需执行print([i for i in my_list])`
  • 感谢您的回答!如果我使用print([i for i in my_list]) 我得到[('a', 1), ('b', 2), ('c', 3)],但不是逐行打印?注意:我使用 Python 3.x 和 Jupyter Notebook。
  • @ArpitSolanki 为什么?您的列表组合与简单地通过print(*my_list) 延迟列表相同。用换行符分解列表就可以了:print(*my_list,sep="\n") - 查看答案。

标签: python-3.x list tuples


【解决方案1】:

您可能正在使用交互式Python interpreter,它将在评估期间调用print(i) 表达式,这就是您获得第一部分输出的原因:

('a', 1)
('b', 2)
('c', 3)

此外,调用print(i)(即计算表达式print(i) 时得到的值)的结果是None,并且由于您使用的是list comprehension,因此您传递给的表达式的值口译员是[None, None, None]。像往常一样,解释器会打印您输入的表达式的值,这解释了最后一行:

[None, None, None]

如果您将表达式作为脚本执行,您将获得预期的输出:

% cat ./1.py
#!/usr/bin/python3

[print(i) for i in range(1, 3)]
% ./1.py
1
2

请注意,这不是一个内联for循环,据我所知没有这样的东西。相反,它被称为列表推导,是一种构建列表的特殊语法。

如果您在解释器中并且想要单行 for 循环,您可以尝试:

for i in range(3): print(i)

但你需要按两次Enter

【讨论】:

    【解决方案2】:

    您的 [None,None,None] 源于print 生成的输出 - print 返回 None 以及将 3 个打印语句放入列表(并输出它们的部分)的副作用,结果列表是 [None,None,None] ,由您的解释器自动编写。

    恕我直言,最好解构列表并使用合适的seperator:

    my_list = [('a', 1), ('b', 2), ('c', 3)]
    
    print(*my_list,sep="\n")
    

    输出:

    ('a', 1)
    ('b', 2)
    ('c', 3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 2017-08-16
      • 2018-02-04
      • 1970-01-01
      相关资源
      最近更新 更多