total = 0
for i in range(0, some upper bound):
total += i
对不起,如果这是基本的,但我有很多这样的东西,它们占用的空间比舒适的要多。
total = 0
for i in range(0, some upper bound):
total += i
对不起,如果这是基本的,但我有很多这样的东西,它们占用的空间比舒适的要多。
total = sum(range(upper))
或者
total = upper * (upper - 1) / 2
第一个是 Python,第二个是 Gauss。
编辑:当不从零开始时:
total = sum(range(lower, upper))
或者,再次根据高斯,对 做同样的事情upper
并减去同样的事情lower
:
total = upper * (upper - 1) / 2 - lower * (lower - 1) / 2
如果您使用的是 Python 2.x,请将所有内容替换range
为xrange
.
total = some_upper_bound * (some_upper_bound -1) / 2
如果lower_bound != 0
:
total = (some_upper_bound - lower_bound) * (some_upper_bound + lower_bound - 1) / 2
更新:我会删除我的答案,因为它实际上是已接受答案的一部分的精确副本(尽管我是独立回答的)。但是,有一个非常小但理论上有趣的改进lower_bound
:我的答案仅包含两个乘法/除法(比加法/减法相对更昂贵),而另一个答案包含四个。
扩大eumiro。为了清楚起见,您可能想编写一个封装高斯方法的方法。我会建议这样的东西(用 Groovy 编写,因为我不知道 Python 语法):
public int sumUpToBoundary(def upper_bound){
return (upper_bound) * (upper_bound - 1) / 2;
}
public int sumBetween(def lower_bound, def upper_bound){
return sumUpToBoundary(upper_bound) - sumUpToBoundary(lower_bound);
}
public void someOtherMethod() {
int total = sumUpToBoundary(some_upper_bound);
int total2 = sumBetween(some_lower_bound, some_upper_bound);
}
更新:@mspy 指出我的方法签名不是 Python 的风格。我已将示例更新为 groovy,它支持更多类似 Python 的语法。