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'?
这里if关键字有两种不同的、不相关的用法:
作为条件表达式的一部分,形式为... if ... else ...:
item = [x**2 if x % 2 == 0 else x**3 for x in range(10)]Run Code Online (Sandbox Code Playgroud)作为列表理解的过滤器,形式为if ...:
item = [x**2 for x in range(10) if x % 2 == 0]Run Code Online (Sandbox Code Playgroud)在您的第一个示例中,您有一个格式错误的条件表达式,缺少其else. 此外,语义不同。在1),你在列表中某一值时,每个价值range(10)。在 2) 中,您只能在列表中获得偶数值的值。