【发布时间】:2013-03-14 22:37:44
【问题描述】:
我正在尝试使用 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 不起作用 =\
有人有什么建议吗?
【问题讨论】:
-
传递给
reduce()的函数接受两个参数;序列中的前一个结果和当前元素。你想改用filter()吗? -
而
[range(200)]创建了一个包含 one 元素的列表,另一个包含 200 个数字的列表。当输入列表中只有一个元素时,reduce()什么都不做,并返回该输入元素。 -
我给它两个参数;序列在括号中,范围(200)。
-
当我使用过滤器时,它只返回布尔值。
-
你需要使用
reduce(..., range(200)),即使这样也是错误的,因为我认为你不明白reduce()做了什么。