关于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吗?
求大神指点,谢谢!
关于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。
第一个表达式:
list(filter(lambda x: x % 2, range(10)))
这里的 lambda 函数是 lambda x: x % 2。 x % 2 计算 x 除以 2 的余数:
- 当 x 为偶数时,余数为 0,布尔值为 False。
- 当 x 为奇数时,余数为 1(对于 range(10) 中的非负整数),布尔值为 True。
因此,filter 只保留使 lambda 返回 True 的元素,即奇数。输出结果为:
第二个表达式:
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 保留偶数。输出结果为:
关键区别:
x % 2 并没有省略 == 0。在第一个表达式中,x % 2 直接用作条件,依靠 Python 的布尔转换(0 为 False,非 0 为 True)。而第二个表达式显式地检查余数是否等于 0。
所以,x % 2 和 x % 2 == 0 在布尔意义上是相反的:前者对奇数为 True,后者对偶数为 True。
希望这能解答你的疑惑!如果还有问题,欢迎继续讨论。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]