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

0 python

我正在尝试创建一个列表,其中偶数显示为偶数,奇数显示为"奇数".

这是我正在尝试的代码.

lst = [if x % 2 == 0 else 'odd' for x in range(11)]
Run Code Online (Sandbox Code Playgroud)

我希望得到这样的东西

[0, "odd", 2, "odd", 4, "odd", 6, "odd", 8, "odd", 10]
Run Code Online (Sandbox Code Playgroud)

但我一直有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
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Mar*_*ers 6

你错过了x之前if:

lst = [x if x % 2 == 0 else 'odd' for x in range(11)]
Run Code Online (Sandbox Code Playgroud)

Python的条件表达式语法 具有同时具有"真"和存在于"假"表达式,因此true_expr if condition else false_expr,其中之一true_exprfalse_expr将基于所述的真值来评估condition表达.

演示:

>>> [x if x % 2 == 0 else 'odd' for x in range(11)]
[0, 'odd', 2, 'odd', 4, 'odd', 6, 'odd', 8, 'odd', 10]
Run Code Online (Sandbox Code Playgroud)

请注意,使用条件表达式不会过滤,它始终生成输出.对于list comprehenion语法的per-iteration表达式来说这很好,但如果你想过滤输入列表并完全删除奇数值,那么在循环使用if condition测试:for ... in ...

>>> [x for x in range(11) if x % 2 == 0]  # filtering, only even numbers
[0, 2, 4, 6, 8, 10]
Run Code Online (Sandbox Code Playgroud)