pythonのrange関数で最後の数字も含めるには?範囲指定のコツ

programming python

pythonには、連続した数字のオブジェクトを作るための組み込み関数、range関数が用意されています。
range関数は、引数として指定した値の範囲での連続した数値を要素として保持するrangeオブジェクトを生成する関数です。

python2とpython3では同じrange関数でも仕様が全く違いますので注意しましょう!(python2でのxrange関数がpython3のrange関数に相当)
ここではpython3を前提としたrange関数の基本的な使い方と、最後(引数「stop」)で指定した数を含める方法について解説します。

スポンサーリンク

range関数の基本的な使い方

range関数は、引数として指定した開始数(start)から終了数(stop)までの連続した数値を要素とする、rangeオブジェクトを生成します。
range関数を使うときの書式はこのような形になります。

range(stop)
range(start, stop[, step])

この場合「startの数値から順にstepの数値を足していき、stopの数値をオーバーしない範囲での連続した数値を要素とする」rangeオブジェクトを生成します。
なおstart、stepについては省略が可能です。
startを省略した場合はデフォルトで0が、stepを省略した場合はデフォルトで1が指定されます。

実際の文例と生成されるオブジェクトの対応は次のとおりです。

range(6)
–> 0 1 2 3 4 5
range(1, 4)
–> 1 2 3
range(4,10,2)
–> 4 6 8

なお生成するrangeオブジェクトの数値は降順にすることも可能で、その場合はstepの数値に負の値を指定します。

range(6,0,-1)
–> 6 5 4 3 2 1
range(0, -6, -2)
–> 0 -2 -4

基本的な使い方は以上ですが、この関数で生成されるオブジェクトの要素として、stopに指定した値は含まれないことに注意が必要です。

スポンサーリンク

最後の数字(stop)として指定した数字を含める方法はある?

残念ながら、正攻法でstopの数値を含める方法はありません
そういったオプションも用意されていないので、関数の仕組み上不可能になっています。

なのでどうしても最後の数字を含めたい!という場合は、力技でなんとかするしかありません。

例えば、1からNまでの数値を要素として持つrangeオブジェクトを生成したい場合、次のような書き方が考えられます。

start = 1
stop = N+1
range(start,stop)
–> 1 2 3 … N-1 N

一般化すると次のようになります。
startから順にstepの数値を足していき、stopを最後の値として含むrangeオブジェクトを生成する場合

stop = stop+step
range(start,step,stop)

コメント