|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
print(list(filter(lambda n : not(n%3), range(1, 100))))
打印: [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
print(list(filter(lambda n : not(n%3), range(100))))
打印:[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
print(list(filter(lambda x : None if x % 3 else x, range(101))))
打印:[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
为什么第三个和第一个有什么不同吗? 为什么没有打印0出来
本帖最后由 Twilight6 于 2020-6-29 18:12 编辑
第三个:filter(lambda x : None if x % 3 else x, range(101))
这个lambda 匿名函数中用了三元运算符 如果条件成立,那么返回 None 反之 返回 x 的值,而 None 可以看成 bool 类型值的 False 所以会将条件 x % 3 成立的元素过滤掉
第一个:filter(lambda n : not(n%3), range(1, 100))
not 可以认为是反转真假,如果为真那么 not 后就为假 反之 为假 not 后为真 ,则这里只要 n%3 不为 0 都为 False ,导致 filter 过滤掉这些元素,只有 n%3 = 0 的时候 条件为 True,保留下元素来
而第一个和第三个最终过滤效果是一样的,而 0 为什么没有保留下来,我们先看第三个
filter(lambda x : None if x % 3 else x, range(101)) 这里 0%3 = 0 条件成立 但是 0 的布尔类型值为 False 被 filter 判断时候为 False 就直接过滤掉了
而第一个也是同理,而且第一个还不从 0 开始 更不可能会有 0 了
|
|