鱼C论坛

 找回密码
 立即注册
查看: 930|回复: 5

关于lambda问题求鱼友讲解

[复制链接]
发表于 2020-5-27 11:07:44 | 显示全部楼层 |阅读模式

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

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

x
代码是这样的:
list ( filter ( lambda x: x*2, range (10) ) )
运行结果是:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
我的疑问是,为啥x乘2的结果不会显示出来呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-27 11:12:45 | 显示全部楼层
本帖最后由 Twilight6 于 2020-5-27 11:15 编辑


要知道Python中 只要 0 、空字符串、空列表、空字典等 都可以看作布尔类型的值为 False

只要是 非0 ,非空字符串、列表、字典 等 都可以看作布尔类型的值为 True


filter 是过滤值的函数的  过滤 lambda x: x*2 中为 False的值

因为  ( lambda x: x*2, range (10) ) 得出的列表是 [0,1,2,3,4,5,6,7,8,9]

而只有 0 的值为 False  所以 只过滤了 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-27 11:12:54 From FishC Mobile | 显示全部楼层
因为x*2都是真值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-27 11:20:35 | 显示全部楼层
显示出来要写
list(map(lambda x:x*2,range(10)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 19:34:19 | 显示全部楼层
list (filter ( lambda x: x*2, range (10)))
拆成两部分看
首先是最外面的list(),是把结果显示出来,这个没有什么问题。
其次就是一个filter函数的用法
filter函数用法,filter(function, iterable),就是把一个function(函数,可以是自己定义的函数,也可以是匿名函数,也可以是内置函数) 映射于可迭代对象,举个例子
filter(abs,[0,1,2,3,4])把abs函数与后面列表内的元素映射,即列表内每个元素求绝对值。最后结果是一个地址,要显示可以用list(),结果是[1,2,3],可以看到0没有了
这是因为,filter只会返回结果为True的,0在python里面是False。
所以以你的提问来看   filter (lambda x: x*2, range (10)),其实是把lambda函数映射到0~9这10个数,这个lambda函数的意思是传入一个x,返回结果是x*2
当传入0时,0*2的结果是为0,其他1~9都是True,所以最终结果是[1, 2, 3, 4, 5, 6, 7, 8, 9]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-4 20:32:02 | 显示全部楼层
有0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 21:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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