鱼C论坛

 找回密码
 立即注册
查看: 18|回复: 1

关于lambda表达式中x %2与x % 2 ==0计算结果区别的困惑

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面两个lambda表达式:

(1)list(filter(lambda x: x % 2, range(10))), 输出的是奇数。
(2)list(filter(lambda x: x% 2 == 0, range(10))),输出的是偶数。

为什么第一个公式中x % 2输出的就是奇数,而第二个公式中x% 2 == 0输出的就是偶数?x % 2公式后面中省略的不是 == 0吗?

求大神指点,谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层
关于lambda表达式中x %2与x % 2 ==0计算结果区别的困惑
下面两个lambda表达式:

(1)list(filter(lambda x: x % 2, range(10))), 输出的是奇数。
(2)list(filter(lambda x: x% 2 == 0, range(10))),输出的是偶数。

为什么第一个公式中x % 2输出的就是奇数,而第二个公式中x% 2 == 0输出的就是偶数?x % 2公式后面中省略的不是 == 0吗?

求大神指点,谢谢!


你好!你的困惑很常见,关键在于理解 Python 中布尔上下文的处理方式。

在 Python 中,filter() 函数会根据给定的函数(这里是 lambda 表达式)返回的 True 或 False 来过滤元素。重点在于:在布尔上下文中,非零值被视为 True,零被视为 False

第一个表达式:
  1. list(filter(lambda x: x % 2, range(10)))
复制代码

这里的 lambda 函数是 lambda x: x % 2x % 2 计算 x 除以 2 的余数:
- 当 x 为偶数时,余数为 0,布尔值为 False。
- 当 x 为奇数时,余数为 1(对于 range(10) 中的非负整数),布尔值为 True。
因此,filter 只保留使 lambda 返回 True 的元素,即奇数。输出结果为:[1, 3, 5, 7, 9]

第二个表达式:
  1. list(filter(lambda x: x % 2 == 0, range(10)))
复制代码

这里的 lambda 函数是 lambda x: x % 2 == 0。这是一个布尔表达式:
- 当 x 为偶数时,x % 2 等于 0,所以 x % 2 == 0 为 True。
- 当 x 为奇数时,x % 2 等于 1,所以 x % 2 == 0 为 False。
因此,filter 保留偶数。输出结果为:[0, 2, 4, 6, 8]

关键区别:
x % 2 并没有省略 == 0。在第一个表达式中,x % 2 直接用作条件,依靠 Python 的布尔转换(0 为 False,非 0 为 True)。而第二个表达式显式地检查余数是否等于 0。

所以,x % 2x % 2 == 0 在布尔意义上是相反的:前者对奇数为 True,后者对偶数为 True。

希望这能解答你的疑惑!如果还有问题,欢迎继续讨论。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-14 22:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表