my_list = []
for x in range(1,50):
if x%3==0:
my_list.append(x)
else:
pass
print(my_list)
[x for x in range(1,50) if x%3==0]
[x if x%3==0 else pass for x in range(1,50)]
Error:
File "", line 1
[x if x%3==0 else pass for x in range(1,50)]
^
SyntaxError: invalid syntax
但是根据列表理解的语法,如果我们在“ for”之前使用“ if”,那么它应该是完整的“ if-else”语句
据我所知,所有3个代码应产生相同的输出。谁能帮助我了解为什么会出现此错误?
我尝试在Python-3.7.4版本中执行此代码。
谢谢。
答案 0 :(得分:0)
pass
是一个语句,而不是表达式,因此您不能在列表推导中使用它。
您注意到,您的第一个版本运行良好,并且是在理解中筛选列表的正确方法,因此,我不确定您为什么要使用错误的语法。
更明确地说,如果要用有效的表达式替换pass
,例如:
[x if x%3==0 else 0 for x in range(1,50)]
那么这不会引发任何错误。它根本无法满足我的要求,因为所有3的非整数都将变为0
,而不是被排除在外。但这就是列表推导(和map
和filter
等效)的工作方式:[expr(x) for x in lst]
形式的内容将始终与lst
相同,并且在为了使用if
语句进行过滤,您需要在if
的之后的for
子句,如第一个示例所示。