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

Python


この記事では、Pythonのrange関数について解説します。range関数を使うことで任意の範囲の連番を生成することができます。

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

rangeオブジェクトの生成

range関数と記述しましたが、rangeは型です。しかし、よく関数のように使われるので公式のチュートリアルにも「range() 関数」と明記されています。

まずは、rangeオブジェクトを生成する方法を見ていきましょう!

0から任意の値までの範囲を生成する[range(stop)]

range(stop)に整数を渡すことで、0 <= N < stopの範囲を生成することが出来ます。

書式

引数に整数を1つだけ指定します。

range(stop)

サンプル

生成したrangeオブジェクトを、リストに変換して範囲を確認してみます。

r = range(3)

print(r)
print(list(r))

実行結果

range(0, 3)
[0, 1, 2]

マイナスの値を指定する

stopには、マイナスの値も指定することができますが、範囲は生成されません。

r = range(-3)

print(list(r))

実行結果

[]

任意の範囲を生成する[range(start, stop)]

range(start, stop)の引数に整数を指定することで、start <= N < stopの範囲が生成されます。

書式

引数に整数を2つ指定します。その際、stopの方に大きい値を指定します。

range(start, stop)

サンプル

以下のコードでは、1 <= N < 4の範囲が生成されます。

r = range(1, 4)

print(list(r))

実行結果

[1, 2, 3]

マイナスの値を指定する

start < stopであれば、マイナスの範囲も生成することができます。

r = range(-4, -1)

for i in r:
    print(i)

実行結果

-4
-3
-2

幅(step)を指定する[range(start, stop, step)]

stepに整数を指定することで、値が増減する幅を指定することが出来ます。stepを指定するには、必ずrange(start, stop, step)の形で呼び出す必要があります。

書式

引数に整数を3つ指定します。キーワード呼び出しはできません。

range(start, stop, step)

サンプル

以下のコードでは、stepに2を指定したので、2ずつ値が増えていくようになりました。

r = range(0, 12, 2)

for i in r:
print(i)

実行結果

0
2
4
6
8
10

マイナスの値を指定する

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

r = range(-1, -4, -1)

for i in r:
print(i)

実行結果

-1
-2
-3

Python2のrange関数

先ほどまではPython3のrange関数の使い方でした。Python2では、range()xrange()が用意されています。

range()

range()は、リストを返します。

print(range(3))

実行結果

[0, 1, 2]

xrange()

xrange()は、xrangeオブジェクトを返します。この関数は、python3range()に相当します。

print(xrange(3))

実行結果

xrange(3)

Python3では、xrange()は定義されていないので注意してください!

rangeオブジェクトで出来ること

rangeオブジェクトでは、以下のようなことが出来ます。

インデックスを指定して値を取得する

[]を使って値を取得することができます。

r = range(3)

print(r[0])
print(r[1])
print(r[2])

実行結果

0
1
2

for文でループ処理

for文とrange()を組み合わせることで、任意の回数だけ繰り返し処理することができます。

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

実行結果

0
1
2

リストに変換する

リストに変換することができます。

r = range(3)

print(list(r))

実行結果

[0, 1, 2]

逆順にする

reversed関数を使って逆順にすることができる。

r = range(3)

for i in reversed(r):
    print(i)

実行結果

2
1
0

スライスを使って新しい範囲を生成する

スライスを使うことで、任意のrangeオブジェクトから、指定した範囲の新しいrangeオブジェクトを生成することが出来ます。

r = range(10)

print(r)
print(r[3:6])

実行結果

range(0, 10)
range(3, 6)

stepを指定することも出来ます。

r = range(10)

print(r)
print(r[3:6:2])

実行結果

range(0, 10)
range(3, 6, 2)

float型の範囲を生成したい場合

range()では整数型の範囲しか生成することしかできません。なので、range()以外の方法でfloat型の範囲は生成します。

内包表現を使う

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

r = [i / 100 for i in range(90, 100, 2)]
print(r)

実行結果

[0.9, 0.92, 0.94, 0.96, 0.98]

NumPyを使う

NumPyを使うことで、簡単に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

まとめ

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

今回のおさらい

  • 0 <= N < stop = 『range(stop)』
  • start <= N < stop = 『range(start, stop)』
  • ステップ幅を指定する = 『range(start, stop, step)』

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

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

タイトルとURLをコピーしました