如何使用lambda的范围,map,filter和reduce来计算可被3和5整除的数字之和

时间:2016-04-21 21:10:39

标签: python dictionary lambda filter reduce

我需要帮助计算在给定范围内可被3或5整除的数字之和。到目前为止,我已经到了这个地步;

print filter(reduce(map(lambda x, y: x % 3 == 0 or y % 5 == 0, x + y, range(30))))

会抛出此错误

Traceback (most recent call last):
File "<pyshell#65>", line 1, in <module>
print filter(reduce(map(lambda x, y: x % 3 == 0 or y % 5 == 0, x + y, range(30))))
NameError: name 'x' is not defined

我认为我没有找到解决方案,甚至没有找到正确的方向,所以如果有人能指出我会走向伟大的方向,欢呼。

3 个答案:

答案 0 :(得分:1)

使用a定义bb > a后:

reduce(lambda x, y: x + y, filter(lambda x: x % 3 == 0 or x % 5 == 0, range(a, b)))

在你的情况下:

reduce(lambda x, y: x + y, filter(lambda x: x % 3 == 0 or x % 5 == 0, range(30)))

或没有reducefilter

sum(x for x in range(30) if x % 3 == 0 or x % 5 == 0)

如果值范围很大(不是30),则可以在python 2上使用xrange,以便它返回生成器而不是列表。

如果您真的想要包含map功能,可以使用身份功能,如下所示:

reduce(lambda x, y: x + y, filter(lambda x: x % 3 == 0 or x % 5 == 0,
                                  map(lambda x: x, range(30))))

答案 1 :(得分:0)

试试这个:

sum([i for i in range(1,100) if i%3==0 and i%5==0])

如果您需要一些解释,请随意询问:)

答案 2 :(得分:0)

reduce(lambda x, y: x + y, filter(lambda x : x % 3 == 0 or x%5 == 0, range(11)), 0)