Python:获取Lambda函数的总和

时间:2013-03-14 22:37:44

标签: python math lambda

我正在尝试使用lambda函数得到Python中所有素数低于2,000,000的总和。 (我已经强制执行,但这需要太长时间,我想要一个更好的解决方案。)这是我到目前为止所拥有的:

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 个答案:

答案 0 :(得分:2)

您的代码会发生一些奇怪的事情。

  • 我认为您确实希望使用filter(),而不是reduce()
  • lambda x: isPrime(x)相当于isPrime(毕竟,isPrime已经是一个返回isPrime}结果的函数。
  • [range(200)]创建一个嵌套列表。外部列表中唯一的元素是一个数字从0到200的列表。我想你只需要单个列表。

所以,请尝试以下方法:

print filter(isPrime, range(200))

答案 1 :(得分:2)

这里有很多错误。首先,您可以使用lambda x: isPrime(x)替换isPrime。函数是Python中的第一类,这意味着您可以像整数或字符串一样传递它们。第二个是你传递一份清单; [range(200)]是一个包含返回值range(200)范围的列表,它返回一个列表,因此您只减少一个值。这解决了第三个问题,即你的reduce函数应该接受2个参数,因为reduce调用函数作为时间对项目对传递。实际上,只有一个项目,因此该函数被调用0次,并返回列表中的第一个项目。

我怀疑您要做的是过滤列表,您可以使用filter函数执行此操作,或者您可以使用列表推导,如下所示:

[x for x in range(200) if isPrime(x)]