2

タイトルを正しく表現したかどうかはわかりませんが、私がやろうとしているのは、xrange()が渡されている値の合計を見つけることです。

理想的には、次のようになります:(これは機能するコードではないことに注意してください)

mofthree = xrange(2, 1000, 3)
moffive = xrange(4, 996, 5)

print mofthree + moffive

ただし、もちろん、2つの関数を一緒に追加することはできません。また、たとえば、すべての値をmofthree一緒に追加し、結果を新しい変数に格納してから、同じことを実行moffiveして2つの新しい変数を一緒に追加するようなこともできます。

ただし、どちらの方法でもこれらの値を加算する方法がわかりません。

4

3 に答える 3

6
mofthree = xrange(2, 1000, 3)
moffive = xrange(4, 996, 5)

print sum(mofthree) + sum(moffive)

または itertools を使用してchain

from itertools import chain
mofthree = xrange(2, 1000, 3)
moffive = xrange(4, 996, 5)

print sum(chain(moffive, mofthree))
于 2012-07-26T03:35:20.420 に答える
3

sum()を使用できます:

>>> sum(xrange(2, 1000, 3))
166500
>>> sum(xrange(4, 996, 5))
99301
于 2012-07-26T03:35:03.763 に答える
0

範囲内のすべての項目を実行してそれらを追加する代わりに、次のように算術級数の合計に式を使用できます。

def sum_range(*args):
    # parse the arguments, using the same positional notation as range()
    lo,hi,step = [
        lambda args: (0,       args[0], 1),
        lambda args: (args[0], args[1], 1),
        lambda args: args
    ][len(args)-1](args)

    # make sure we handle negative steps properly
    flip_sign = (step < 0)
    if flip_sign:
        lo,hi,step = -lo,-hi,-step

    # and do the actual calculation
    items = (hi - lo + step - 1) // step
    if items <= 0:
        return 0
    else:
        total = (2*lo + (items-1)*step) * items // 2
        return -total if flip_sign else total

その後、次のように使用できます

print sum_range(2, 1000, 3) + sum_range(4, 996, 5)

興味のために、フレデリック・ハミディの答えに対して比較タイミングを実行しました。

アルゴリズムの実行時間のグラフ

ここで、x 軸は範囲内のアイテムの数、y 軸はランタイム、私のアルゴリズムは緑、彼のアルゴリズムは青です。予想どおり、彼のアルゴリズムの実行時間は項目の数に比例し、私のアルゴリズムは一定で、交点は約 75 項目です。

于 2012-07-27T01:49:12.923 に答える