【问题标题】:List comprehension syntax - how to use ... if... else? [duplicate]列表理解语法 - 如何使用 ... if ... else? [复制]
【发布时间】:2019-05-07 21:35:44
【问题描述】:

我刚刚开始使用 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)

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

谁能解释我为什么会遇到语法错误?我想让列表根据基数 (x) 的值创建一个偶数平方列表,如果列表值不是“偶数”平方,则具有值“49”。

【问题讨论】:

  • [x ** x if x % 2 == 0 else 49 for x in range(1,11)] .. 寻找骗子

标签: python list-comprehension


【解决方案1】:

在这种情况下,你会想要

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."

【讨论】:

  • 有趣。是否有对此的 Python 文档参考?我想知道更多!
  • 我进行了编辑并添加了更多解释
猜你喜欢
  • 2020-05-13
  • 2021-10-13
  • 2020-11-15
  • 2015-10-28
  • 2019-12-04
  • 2011-05-23
  • 1970-01-01
  • 2018-04-27
  • 2023-03-14
相关资源
最近更新 更多