鱼C论坛

 找回密码
 立即注册
查看: 1211|回复: 7

[已解决]lambda语句的理解问题

[复制链接]
发表于 2020-2-25 11:58:31 | 显示全部楼层 |阅读模式

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

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

x
list(filter((lambda x:x%3==0),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]
list(filter((lambda x:not(x%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]
求助  list(filter((lambda x:x%3==0),range(100)))我这一个语句怎么来理解呀
最佳答案
2020-2-25 12:01:22
本帖最后由 zltzlt 于 2020-2-25 12:02 编辑

可以将它转化为列表推导式:
>>> [x for x in range(100) if x % 3 == 0]
[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]

filter() 的函数就是过滤掉假的值。例如:
>>> list(filter(lambda x: x % 5 == 0, range(100)))    # 过滤 100 以内除以 5 余数不为 0 的数
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

lambda 不仅可以用在 filter 上,它还能作为一个函数:
>>> f = lambda x: x * 2    # 冒号前面的是参数,冒号后面的是返回值
>>> f(3)    # 3 * 2
6
>>> f(6)    # 6 * 2
12
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 12:01:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zltzlt 于 2020-2-25 12:02 编辑

可以将它转化为列表推导式:
>>> [x for x in range(100) if x % 3 == 0]
[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]

filter() 的函数就是过滤掉假的值。例如:
>>> list(filter(lambda x: x % 5 == 0, range(100)))    # 过滤 100 以内除以 5 余数不为 0 的数
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

lambda 不仅可以用在 filter 上,它还能作为一个函数:
>>> f = lambda x: x * 2    # 冒号前面的是参数,冒号后面的是返回值
>>> f(3)    # 3 * 2
6
>>> f(6)    # 6 * 2
12
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 12:02:07 | 显示全部楼层
filter里边的匿名函数的返回值是x%3==0是否正确,如果正确就返回x,不正确就继续
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 21:28:48 | 显示全部楼层
qiuyouzhi 发表于 2020-2-25 12:02
filter里边的匿名函数的返回值是x%3==0是否正确,如果正确就返回x,不正确就继续


list(filter((lambda x:x%3==0),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]
那不是应该过滤掉0 3 6 .....吗?为什么是保留下来了呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 21:33:16 | 显示全部楼层
余绍铭 发表于 2020-2-25 21:28
list(filter((lambda x:x%3==0),range(100)))
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, ...

过滤掉为否的值
就是x除以3的余数不等于0的被过滤掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 21:35:25 | 显示全部楼层
qiuyouzhi 发表于 2020-2-25 21:33
过滤掉为否的值
就是x除以3的余数不等于0的被过滤掉

list(filter((lambda x:not(x%3)),range(100)))   这一句怎么理解呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 21:38:00 | 显示全部楼层
余绍铭 发表于 2020-2-25 21:35
list(filter((lambda x:not(x%3)),range(100)))   这一句怎么理解呀

100以内能整除3的数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 21:40:23 | 显示全部楼层
qiuyouzhi 发表于 2020-2-25 21:38
100以内能整除3的数字

not(i%3) 这句我没懂到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-9 10:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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