用尺子量海 发表于 2020-8-7 11:15:27

第021讲课后习题问题求助


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,,,,)输出来,应该怎么纠正才能得出结果呢?

鱼油求助!!!

zltzlt 发表于 2020-8-7 11:16:02

要把它转化成列表

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

用尺子量海 发表于 2020-8-7 11:19:43

zltzlt 发表于 2020-8-7 11:16
要把它转化成列表

转化成列表之后,所有3的倍数全都不能打印出来(悲伤)

zltzlt 发表于 2020-8-7 11:20:11

用尺子量海 发表于 2020-8-7 11:19
转化成列表之后,所有3的倍数全都不能打印出来(悲伤)


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

用尺子量海 发表于 2020-8-7 11:24:30

zltzlt 发表于 2020-8-7 11:20


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判断成立后,返回的结果对吧

可不可以用列表推导式类理解呢?

zltzlt 发表于 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()


用 filter() 没打印出 0 的原因是,0 可以被 3 整除,0 % 3 返回 0,然而 0 本身为假,所以被过滤掉了

用尺子量海 发表于 2020-8-7 11:32:12

zltzlt 发表于 2020-8-7 11:29
1. 是的

2. 完全可以


懂了,非常感谢!
页: [1]
查看完整版本: 第021讲课后习题问题求助