为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Python 列表理解过滤器对 if-else 有不同的语法

为什么 Python 列表理解过滤器对 if-else 有不同的语法

青春有我 2022-07-05 19:41:25
在过去的一周里,我一直在提高我的 python 编程技能,并且遇到了列表理解的条件过滤,这被证明非常有用。但是,要向if 过滤器添加else 子句,python 需要不同的语法,如下所示:没有 else 子句的列表理解过滤器squares = [x**2 for x in range(20) if x % 2 == 0]带有 else 子句的列表理解过滤器squares = [x**2 if x % 2 == 0 else x + 3 for x in range(20)]if-else 子句必须移到表达式之后的列表理解的开头x**2有人可以解释为什么会这样吗?列表理解中的 if/else问题?询问如何做到这一点,我知道。我的问题是为什么会这样。
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

这是你的一个小小的误解。

您的第一行是带有过滤器的列表理解。它只为那些 xs 构建 x 的平方列表x % 2 == 0

您的第二行不是带有过滤器的列表理解。这只是使用三元运算符的普通未过滤列表理解。在这种情况下,它不是一个子句,而是一个表达式。它说:对于每个 x in range(20),评估这个表达式并将结果值放入列表中。


查看完整回答
反对 回复 2022-07-05
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

尽管重用了关键字,但语句、条件表达式或列表推导的过滤子句if之间没有任何关系。if

过滤器可以很容易地使用不同的关键字来强调这一点,例如,

[x**2 for x in range(20) aslongas x % 2 == 0]

条件表达式也可以

[x**2 when x % 2 == 0 otherwise x + 3 for x in range (20)]

但是,为了避免对程序员的内存造成不必要的负担,也为了避免取消以前有效的标识符名称,在添加新的句法结构时尽可能多地重用关键字。仅当语法禁止明确识别不同用途并且好处超过破坏现有代码的可能性时,才引入新关键字。

请注意,您的第二个没有过滤;考虑可迭代的每个x;只有产生的值x是有条件的。


查看完整回答
反对 回复 2022-07-05
  • 2 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号