我有一个包含元组的列表:
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,...]语句?
答案 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)