Python 的内置 sum 函数需要永远计算列表中非常大范围值的总和

问题描述 投票:0回答:1

效果很好并返回 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 方法来计算这样的大和?或者这可能是硬件限制?

python sum list-comprehension
1个回答
0
投票

您的问题是

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)}')

© www.soinside.com 2019 - 2024. All rights reserved.