效果很好并返回 249999500000:
sum([x for x in range(1_000_000) if x%2==0])
这比较慢,但仍然返回 24999995000000:
sum([x for x in range(10_000_000) if x%2==0])
但是,较大范围的值(例如
1_000_000_000
)需要很长时间才能计算。事实上,这会返回一个错误:
sum([x for x in range(10_000_000_000) if x%2==0])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
MemoryError.
我看过一些帖子说内置的求和函数是最快的,但这对我来说看起来并不快。那么我的问题是,我们是否有更快的 Python 方法来计算这样的大和?或者这可能是硬件限制?
您的问题是
range()
函数创建一长串整数,然后 sum()
必须将其相加。对于短列表,这将起作用,但执行时间大致与列表的长度成正比。列表长度加倍,执行时间加倍。
当然,你可以比这更聪明一点。
使用高斯公式:
def gauss(a, b):
return (a + b)/2*(b-a+1)
a = int(input('Enter 1st number: '))
b = int(input('Enter 2nd number: '))
print(f'Sum of {a} to {b} is {gauss(a, b)}')