第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,,,,)输出来,应该怎么纠正才能得出结果呢?
鱼油求助!!! 要把它转化成列表
print(list(filter(lambda x: x if x % 3 else None,range(0,100)))) zltzlt 发表于 2020-8-7 11:16
要把它转化成列表
转化成列表之后,所有3的倍数全都不能打印出来(悲伤)
用尺子量海 发表于 2020-8-7 11:19
转化成列表之后,所有3的倍数全都不能打印出来(悲伤)
print(list(filter(lambda x: None if x % 3 else x,range(0,100)))) 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判断成立后,返回的结果对吧
可不可以用列表推导式类理解呢? 用尺子量海 发表于 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 本身为假,所以被过滤掉了 zltzlt 发表于 2020-8-7 11:29
1. 是的
2. 完全可以
懂了,非常感谢!
页:
[1]