Python

【Python】range関数の使い方【数列の生成】

この記事では、Pythonのrange関数の使い方について解説します。

range関数を使うことで、任意の範囲の連続した数列を生成することができます。range関数は、よくfor文と一緒に使われ、任意の回数だけループ処理したりします。

それでは、range関数の使い方を見ていきましょう❗️

range関数とは?

rangeは、関数言われていますが実はクラスで、実行されると「rangeオブジェクト」を返します。

rangeオブジェクトは、リストなどのコンテナオブジェクトを使わず、引数に渡された整数を元に計算によって数列を生成します。なので、数列の大きさによって使用するメモリのサイズが変わらず、常に一定のコストで使用することができます。

また、rangeはイミュータブルなシーケンス型です。なので、生成したrangeオブジェクトはシーケンス型特有の演算を行うことができます。

【Python】シーケンスとは?この記事では、Pythonのシーケンス(sequence)について解説します。シーケンスとは、文字列やリストのような順番を持った複数の要...

それでは、range関数の使い方を見ていきましょう!

range関数の構文

range関数は以下のように記述します。

range(stop)
range(start, stop[, step])
start 開始値。指定されていない場合は0。
stop 終了値。
step 数列の加算値。指定されていない場合は1。

rangeオブジェクトは、list()でリストに変換できます。

0からstopまでの数列 : range(stop)

range関数に整数を1つだけ渡すことで、0からstopまでの連続した数列を生成することができます。

range(stop)
生成される数列の範囲 0 <= N < stop

サンプル

試しに、rangeオブジェクトからリストを生成し、数列を確認してみます。

r = range(3)
print(list(r))
>> [0, 1, 2]

stop引数にマイナスの値も指定することができますが、0 < stopではないので数列は生成されません。

r = range(-3)
print(list(r))
>> []

任意の範囲の数列: range(start, stop)

range関数に整数を2つ渡すことで、startからstopまでの連続した数列を生成することができます。

range(start, stop)
生成される数列の範囲 start <= N < stop

サンプル

先ほどと同様に、rangeオブジェクトからリストを生成し、数列を確認してみます。

r = range(1, 4)
print(list(r))
>> [1, 2, 3]

r = range(5, 10)
print(list(r))
>> [5, 6, 7, 8, 9]

start < stopであれば、数列を生成することができます。

r = range(-4, -1)
print(list(r))
>> [-4, -3, -2]

r = range(-2, 3)
print(list(r))
>> [-2, -1, 0, 1, 2]

値の増分: range(start, stop, step)

range関数に整数を3つ渡すことで、startからstopまでのstep幅の数列を生成することができます。

range(start, stop, step)

サンプル

rangeオブジェクトからリストを生成し、数列を確認してみます。

r = range(0, 12, 2)
print(list(r))
>> [0, 2, 4, 6, 8, 10]

r = range(0, 12, 3)
print(list(r))
>> [0, 3, 6, 9]

step引数にマイナスの値を指定する場合は、start > stopになるように値を指定する必要があります。

r = range(-1, -4, -1)
print(list(r))
>> [-1, -2, -3]

r = range(3, -3, -2)
print(list(r))
>> [3, 1, -1]

for文と組み合わせる

for文と組み合わせて使うことで、任意の回数だけループ処理することができます。

for i in range(3):
    print(i)
>> 0
>> 1
>> 2

range関数で生成された数列が1つずつiに渡され、ループ処理しています。

【Python】for文の使い方【ループ処理】この記事では、Pythonのfor文の使い方を解説します。for文を使うことで、「繰り返し(ループ)処理」することができます。では、fo...

逆順の数列

逆順にするには、reversed関数を使うことで簡単に実現できます。

r = range(3)
r = reversed(r)
print(list(r))
>> [2, 1, 0]

step引数にマイナスの値を指定し、start > stopの範囲を指定することでも逆順の数列を生成することができます。

r = range(2, -1, -1)
print(list(r))
>> [2, 1, 0]

float型の数列を生成する

range関数はint型の数列しか生成することしかできません。float型の数列を生成するには、「内包表記」、または「NumPy」を使います。

内包表現を使う

内包表現を使うことで、float型の数列を生成することができます。

r = [i / 100 for i in range(90, 100, 2)]
print(r)
>> [0.9, 0.92, 0.94, 0.96, 0.98]

演算した値がブレてしまうことがあるので、round関数を使って値を丸めることができます。

r = [round(i / 100, 2) for i in range(90, 100, 2)]
print(r)
>> [0.9, 0.92, 0.94, 0.96, 0.98]

関連【Python】内包表記の使い方

NumPyを使う

NumPyのarange関数を使うことで、float型の数列を生成することができます。

import numpy as np

np.arange(start, stop, step, dtype)

サンプル

試しに、float型の数列を生成してみます。

import numpy as np

for i in np.arange(0.0, 1.0, 0.2):
    print(i)

実行結果

0.0
0.2
0.4
0.6
0.8

参考numpy.arange — NumPy v1.19 Manual

まとめ

この記事では、Pythonのrange関数の使い方を解説しました。

range関数は、よくfor文と組み合わせて使われるので覚えておくと便利です!

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』