鱼C论坛

 找回密码
 立即注册
查看: 1291|回复: 6

[已解决]第021讲课后习题问题求助

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

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

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

x

3. 你可以利用 filter() 和 lambda 表达式快速求出 100 以内所有 3 的倍数吗?

#打印出100以内3的倍数
a = lambda x: x if x % 3 else None


print(filter(lambda x: x if x % 3 else None,range(0,100)))

print(a,range(0,100))

print((lambda x: x if x % 3 else None,range(0,100)))


输出的结果:



None

<filter object at 0x000001E9AF379518>

<function <lambda> at 0x000001E9AF375730> range(0, 100)

(<function <lambda> at 0x000001E9AF3757B8>, range(0, 100))




为什么输出的结果全是一类似地址的东西,不能把想要的(0,3,6,9,,,,)输出来,应该怎么纠正才能得出结果呢?

鱼油求助!!!
最佳答案
2020-8-7 11:16:02
要把它转化成列表
print(list(filter(lambda x: x if x % 3 else None,range(0,100))))
(]WB01YF`70QC08H`NGMCTN.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-7 11:16:02 | 显示全部楼层    本楼为最佳答案   
要把它转化成列表
print(list(filter(lambda x: x if x % 3 else None,range(0,100))))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-7 11:19:43 | 显示全部楼层
zltzlt 发表于 2020-8-7 11:16
要把它转化成列表

转化成列表之后,所有3的倍数全都不能打印出来(悲伤)
[1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 43, 44, 46, 47, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 64, 65, 67, 68, 70, 71, 73, 74, 76, 77, 79, 80, 82, 83, 85, 86, 88, 89, 91, 92, 94, 95, 97, 98]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 11:20:11 | 显示全部楼层
用尺子量海 发表于 2020-8-7 11:19
转化成列表之后,所有3的倍数全都不能打印出来(悲伤)
[1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19 ...
print(list(filter(lambda x: None if x % 3 else x,range(0,100))))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-7 11:24:30 | 显示全部楼层

print(list(filter(lambda x: 'None 'if x % 3 else x,range(0,100))))

这个None是啥,如果是if x % 3成立,结果就返回为None是吗?那在继续推理一下,

None if x % 3

x if x % 3

[] if x % 3


[]号里面的就是if判断成立后,返回的结果对吧

可不可以用列表推导式类理解呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 11:29:18 | 显示全部楼层
用尺子量海 发表于 2020-8-7 11:24
print(list(filter(lambda x: 'None 'if x % 3 else x,range(0,100))))

这个None是啥,如果是if x % 3 ...

1. 是的

2. 完全可以
>>> print([i for i in range(0, 100) if i % 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() 没打印出 0 的原因是,0 可以被 3 整除,0 % 3 返回 0,然而 0 本身为假,所以被过滤掉了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-7 11:32:12 | 显示全部楼层
zltzlt 发表于 2020-8-7 11:29
1. 是的

2. 完全可以

懂了,非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 14:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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