Python:获取Lambda函数的和
我正在尝试用Python计算所有小于2,000,000的质数的总和,并且想用一个lambda函数来实现。(我之前用暴力破解的方法,但那样太慢了,我想找个更好的办法。)这是我目前的代码:
def isPrime(n):
for x in range(2, int(n**0.5)+1):
if n%x==0: return False
return True
print reduce(lambda x: isPrime(x), [range(200)])
现在,这段代码只是从1开始逐渐打印数字到200,所以我觉得reduce函数没有起作用 =\
有没有人能给我一些建议?
2 个回答
2
这里有很多问题。首先,你可以用简单的 isPrime
来替代 lambda x: isPrime(x)
。在Python中,函数是“第一类公民”,这意味着你可以像传递整数或字符串一样传递函数。第二个问题是你传递的是一个列表的列表;[range(200)]
实际上是一个包含 range(200)
返回值的列表,而 range(200)
返回的是一个列表,所以你只是在减少一个单一的值。这也解决了第三个问题,你的 reduce 函数应该接受两个参数,因为 reduce 会将传入的函数作用于一对一对的项。而现在,只有一个项,所以这个函数实际上没有被调用,最后返回的是列表中的第一个项。
我猜你想做的是过滤这个列表,你可以使用 filter
函数来实现,或者你可以使用列表推导式,像这样:
[x for x in range(200) if isPrime(x)]