对于循环打印无

时间:2018-06-01 07:07:09

标签: python-3.x list tuples

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

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

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

[print(i) for i in my_list]

我明白了:

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

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

2 个答案:

答案 0 :(得分: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

请注意,这是 inline for loop ,就我所知,没有这样的事情。相反,它被称为列表理解,是构建列表的特殊语法。

如果你在翻译中并想要一行for循环,你可以尝试:

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

但您需要按 Enter 两次。

答案 1 :(得分:0)

你的[None,None,None]源于print生成的输出 - print返回None 以及将3个打印语句放入列表(并输出主要部分)的副作用,结果列表为[None,None,None],由解释器自动执行。

恕我直言,最好解构清单并使用合适的sep执行者:

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

print(*my_list,sep="\n")

输出:

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