如何在列表推导中使用if / else?

时间:2019-01-30 14:57:12

标签: python

我正在尝试创建一个列表,其中偶数按原样显示,奇数按“奇数”显示。

这是我正在尝试的代码。

lst = [if x % 2 == 0 else 'odd' for x in range(11)]

我希望得到这样的东西

[0, "odd", 2, "odd", 4, "odd", 6, "odd", 8, "odd", 10]

但是我不断收到SyntaxError异常:

>>> lst = [if x % 2 == 0 else 'odd' for x in range(11)]
  File "<stdin>", line 1
    lst = [if x % 2 == 0 else 'odd' for x in range(11)]
            ^
SyntaxError: invalid syntax

我在做什么错了?

4 个答案:

答案 0 :(得分:6)

您在x之前缺少if

lst = [x if x % 2 == 0 else 'odd' for x in range(11)]

Python conditional expression syntax 必须同时存在'true'和'false'表达式,因此true_expr if condition else false_exprtrue_expr或{ {1}}将根据false_expr表达式的真值进行评估。

演示:

condition

请注意,使用条件表达式不会过滤,它将始终产生输出。这对于列表理解语法的每次迭代表达式而言非常有用,但是如果您要过滤输入列表并完全删除奇数,请在{em之后使用>>> [x if x % 2 == 0 else 'odd' for x in range(11)] [0, 'odd', 2, 'odd', 4, 'odd', 6, 'odd', 8, 'odd', 10] 测试 {{ 1}}循环:

if condition

答案 1 :(得分:1)

这是您想要的吗?

[x if x % 2 == 0 else 'odd' for x in range(11)]
[0, 'odd', 2, 'odd', 4, 'odd', 6, 'odd', 8, 'odd', 10]

如果是这种情况,那么您只是想在列表理解中缺少一些要返回的内容,在这种情况下,如果满足条件,则想返回x

答案 2 :(得分:1)

lst = [x if x % 2 == 0 else 'odd' for x in range(11)]

有关列表理解和三元运算符的更多详细信息,请点击以下链接: https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions https://docs.python.org/3/faq/programming.html#is-there-an-equivalent-of-c-s-ternary-operator

答案 3 :(得分:1)

您缺少if语句为true时应显示的值

[if x % 2 == 0 else 'odd' for x in range(11)]

应该是

[x if x % 2 == 0 else 'odd' for x in range(11)]