|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
比如说有个题目,要求用filter结合lambda,求1-10之间(不含10)的能被2整除的数
答案如下:
- >>> list(filter(lambda x : x if x % 2 == 0 else None,range(1,10)))
- [2, 4, 6, 8]
复制代码
在lambda中,用了三元运算符,变得复杂了。如果x被2除余数为0,则返回x值,如果余数不为0,则返回None.
也就是说,x为2,4,6,8时,返回2,4,6,8,而x为1,3,5,7,9时返回None
可对于filter来说,第一个参数为None的时候,会把第二个参数中所有为True的值筛选出来,也就是应该把1,3,5,7,9也显示出来
但最终结果只有2,4,6,8,并没有显示1,3,5,7,9
请教是哪一步理解错误呢?先谢谢啦!
O2H2O 发表于 2021-5-9 13:37
就是说如果参数不是None时,要看第一个参数的运行结果。只有结果是True,才会将该元素取出。比如说把第一 ...
对,把else None去掉也一样,甚至没必要用三元运算符,只返回真或假就行了,filter并不关心第一个参数返回的具体值是什么,只管真假。
- a=list(filter(lambda x :not x % 2,range(1,10)))
- print(a)
复制代码
|
|