如何在列表理解中使用条件表达式(带有 if 和 else 的表达式)?

新手上路,请多包涵

我有一个列表理解,可以生成给定范围的奇数列表:

 [x for x in range(1, 10) if x % 2]

这使得过滤器可以删除偶数。相反,我想使用条件逻辑,以便对偶数进行不同的处理,但仍对列表有所贡献。我试过这段代码,但失败了:

 >>> [x for x in range(1, 10) if x % 2 else x * 100]
  File "<stdin>", line 1
    [x for x in range(1, 10) if x % 2 else x * 100]
                                         ^
SyntaxError: invalid syntax

我知道 Python 表达式允许这样的语法:

 1 if 0 is 0 else 3

如何在列表理解中使用它?

原文由 ducin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 647
2 个回答

x if y else z 是您为每个元素返回的表达式的语法。因此你需要:

 [ x if x%2 else x*100 for x in range(1, 10) ]

混淆是因为您在第一个示例中使用了 _过滤器_,但在第二个示例中没有。在第二个示例中,您仅使用三元运算符表达式将每个值 映射 到另一个值。

使用过滤器,您需要:

 [ EXP for x in seq if COND ]

如果没有过滤器,您需要:

 [ EXP for x in seq ]

在您的第二个示例中,表达式是一个“复杂”的表达式,恰好涉及 if-else

原文由 shx2 发布,翻译遵循 CC BY-SA 3.0 许可协议

[x if x % 2 else x * 100 for x in range(1, 10) ]

原文由 lucasg 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题