Python 列表理解的误解

pod*_*fan 2 python list-comprehension

这个例子似乎有问题:

item = [x**2 if x %2 == 0 for x in range(10)]
Run Code Online (Sandbox Code Playgroud)

但我可以这样写:

item = [x**2 if x % 2 == 0 else x**3 for x in range(10)]
Run Code Online (Sandbox Code Playgroud)

或者:

item = [x**2 for x in range(10) if x % 2 == 0]
Run Code Online (Sandbox Code Playgroud)

这里的顺序有多重要,为什么在第一个例子中我不能在没有 'else' 的情况下使用 'if'?

che*_*ner 5

这里if关键字有两种不同的、不相关的用法:

  1. 作为条件表达式的一部分,形式为... if ... else ...

    item = [x**2 if x % 2 == 0 else x**3 for x in range(10)]
    Run Code Online (Sandbox Code Playgroud)
  2. 作为列表理解的过滤器,形式为if ...

    item = [x**2 for x in range(10) if x % 2 == 0]
    Run Code Online (Sandbox Code Playgroud)

在您的第一个示例中,您有一个格式错误的条件表达式,缺少其else. 此外,语义不同。在1),你在列表中某一值时,每个价值range(10)。在 2) 中,您只能在列表中获得偶数值的值。