0
total = 0
for i in range(0, some upper bound):
    total += i

これが基本的なものである場合は申し訳ありませんが、私はこれらをたくさん持っており、快適であるよりも多くのスペースを占めています.

4

3 に答える 3

14
total = sum(range(upper))

また

total = upper * (upper - 1) / 2

1 つ目は Python、2 つ目は Gauss です。

編集: ゼロから開始しない場合:

total = sum(range(lower, upper))

または、再びガウスによれば、 で同じことを行い、同じものupperを減算しlowerます :

total = upper * (upper - 1) / 2 - lower * (lower - 1) / 2

Python 2.x を使用している場合は、すべてrangeをに置き換えますxrange

于 2012-06-04T14:04:20.763 に答える
2

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

更新:受け入れられた回答の一部の正確なコピーであるため、回答を削除しました(ただし、個別に回答しました)。ただし、1つは非常に小さいですが、理論的には興味深い改善がlower_bound含まれています。私の答えには2つの乗算/除算しか含まれていません(加算/減算よりも比較的高価です)が、もう1つの回答には4つ含まれています。

于 2012-06-04T14:05:44.317 に答える
0

eumiro を展開します。わかりやすくするために、Gauss メソッドをカプセル化するメソッドを作成することができます。次のようなものをお勧めします (Python の構文がわからないため、Groovy で記述します)。

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 に似た構文をサポートするものです。

于 2012-06-04T14:14:07.003 に答える