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 的作用则是为了进行不同条件下的处理。

  • 21
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值