如何使用 lambda 的 range、map、filter 和 reduce 计算可被 3 和 5 整除的数字之和

How to calculate the sum of numbers divisible by 3 and 5 using lambda's range, map, filter and 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

我认为我还没有找到解决方案,甚至还没有走上正确的轨道,所以如果有人能指出我的方向,那就太好了,干杯。

试试这个:

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

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

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

b > a定义ab后:

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)你可以使用 xrange if on python 2 这样它 returns 一个生成器而不是一个列表.

如果您确实还想包含 map 函数,您可以将其与恒等函数一起使用,如下所示:

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