列表理解语法-如何使用...如果...否则?

时间:2019-05-07 21:35:44

标签: python list-comprehension

我刚开始使用Python,正在阅读有关列表理解的信息。

以下代码:

my_list = [x ** x for x in range(1,11) if x % 2 == 0]
print(my_list)

...产生以下输出:

[4, 256, 46656, 16777216, 10000000000]

然后我尝试了以下代码:

my_list = [x ** x for x in range(1,11) if x % 2 == 0 else 7]
print(my_list)

...但是我从其他的第二个“ e”开始出现语法错误。

有人可以解释为什么我遇到语法错误吗?我想让列表基于底数(x)的值创建偶数平方的列表,并且如果列表值不是“偶数”平方,则希望具有值“ 49”。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您需要

my_list = [x ** x if x % 2 == 0 else 49 for x in range(1,11)]

如果您像这样在列表理解的末尾使用if,则它用于选择要包含的 个元素。如果要根据情况获得不同的结果,则需要在开头使用三元if

有关更多信息,请查看文档here。引用:

  

列表推导由包含表达式的方括号组成,后跟一个for子句,然后是零个或多个for或if子句。结果将是一个新列表,该列表是通过在其后的for和if子句的上下文中评估表达式而得出的。

这里不支持else,大概是因为理解的“主体”中的三元ifif condition then foo else bar)已经完成了此任务,"There should be one-- and preferably only one --obvious way to do it."