Pythonのrange関数で等間隔の値を生成する

この記事では、組み込み関数のrangeの説明をします。

rangeの仕様

rangeの仕様書です。

rangeの引数の仕様は以下となっています。

引数説明
start区間の開始の数値。整数のみ。デフォルトは0。
stop区間の終了の数値(区間には含まれない。)。整数のみ。必須引数。
step間隔の数値。整数のみ。デフォルトは1。

rangeの基本的な使い方です。

for i in range(2):
    print(i)

# 0
# 1
# 引数が1つだとstopの指定となる。
# start=0 stop=2 step=1になる。

for i in range(1, 3):
    print(i)

# 1
# 2
# 引数が2つだとstart stopの指定となる。
# start=1 stop=3 step=2になる。

for i in range(2, 6, 2):
    print(i)

# 2
# 4
# start=2 stop=6 step=4になる。

rangeを詳しく

使用するメモリの量

range関数は、rangeオブジェクトを返します。
rangeオブジェクトは常に一定の量のメモリを使います。
start、stop、stepの値のみを保存しているからです。
listを使えば、rangeが生成した値を確認できます。

r = range(1, 6, 2)
print(r)
print(type(r))
print(list(r))

# range(1, 6, 2)
# <class 'range'>
# [1, 3, 5]

少数は扱えない

rangeが生成する等間隔の値は整数のみです。
start、stop、stepに少数を入れるとTypeErrorになります。

r = range(1, 6, 0.5)
# TypeError: 'float' object cannot be interpreted as an integer

r = range(1, 6.5, 2)
# TypeError: 'float' object cannot be interpreted as an integer

少数を扱いたい場合は、Numpyのarangeをご使用ください。以下の記事で説明しています。

NumPyのarangeとlinspaceで等間隔の値を生成する NumPyのarangeとlinspaceで等間隔の値を生成する

マイナス指定は可能

引数stepをマイナス値にすれば、デクリメントのfor文を作れます。

r = range(-2, -10, -2)
print(list(r))

# [-2, -4, -6, -8]

r = range(10, 2, -2)
print(list(r))

# [10, 8, 6, 4]

for i in range(5, 0, -1):
    print(i)

# 5
# 4
# 3
# 2
# 1