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