Python中列表生成式中的if和else

1. 当只有 if 时,列表生成式构造为 [最终表达式 - (范围选择 - 范围过滤)]

>>> [num ** 2 for num in range(10) if num % 2 == 0] 
[0, 4, 16, 36, 64]

如果 if 和 for 的位置调换,则会报错。

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

2. 当同时有 if 和 else 时,列表生成式构造为 [最终表达式 - 条件分支判断 - 范围选择]

>>> [num ** 2 if num % 2 == 0 else 0 for num in range(10)]
[0, 0, 4, 0, 16, 0, 36, 0, 64, 0]

如何 if 和 for 的位置调换,则会报错。

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

官方文档并没有提及到这个。我就说一下我的理解方法。

1,python解释器看到列表生成式会先找关键字 for,for 后面的部分是为了筛选需要显示的数字,for 前面的表达式则是对这些数字进行进一步加工。

2,当只有 if 而没有 else 时,此时迭代器 range 里面的元素会被筛选,只有偶数才会进行下一步操作;筛选好之后,再进行平方操作。这里if的作用是为了筛选。

3, 当同时有 if 和 else 时,此时迭代器中的所有元素都将会在下一步被处理,然后就是偶数的进行平方,奇数的显示为0。这里 if 和 else 的作用则是为了进行不同条件下的处理。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页