range関数の使い方です。
range関数を使うと、連続した数の簡単に扱うことができるので、for文で特定の回数を繰り返すループ処理に使われます。
range型の表示
range関数で連続した数を作ると、range型のオブジェクトが返ってきます。
In [1]: range(3)
Out[1]: range(0, 3)
In [1]: range関数で、rangeオブジェクトを作成して、表示する。
Out[1]: range型のオブジェクト
range型のオブジェクトの内容は、list関数に入れて表示します。
In [1]: list(range(3))
Out[1]: [0, 1, 2]
In [1]: range関数で、rangeオブジェクトを作成し、list関数で表示する。
Out[1]: rangeの内容
list型で連続した数を作成
list型で連続した数を作成すれば、range関数を同じデータとなりますが、入力に手間がかかるのと、メモリをたくさん使うことになります。
# range型 sample_1 = list(range(3)) # [0, 1, 2] # list型 sample_2 = [0, 1, 2]
range関数のパラメーター(引数)
range(start, stop[, step])
start、stop、stepと、3つのパラメーターが設定できます。
パラメーターは、整数(int)を使用します。
浮動小数点数(float)で設定するとエラーになります。 # 1.0や0.5はエラー
start | 開始の値(整数) | デフォルト: 0 省略ができる |
stop | 終了の値(整数) | 必須 |
step | 連続する値の間隔(整数) | デフォルト: 1 省略ができる |
stepが正の場合
rangeの内容は、r[i] = start + step * i
制約条件は、i >= 0 かつ r[i] < stop
注意する点は、stopで設定した値は、rangeには含まれません。
stopのみ設定する。
# stop = 5
In [1]: list(range(5)) # range(stop)
Out[1]: [0, 1, 2, 3, 4]
startとstopを設定する。
startを1からにすると、rangeの内容から0がなくなる。
# start = 0, stop = 5(In [1]と同じ)
In [2]: list(range(0, 5)) # range(start, stop)
Out[2]: [0, 1, 2, 3, 4]
# start = 1, stop = 5
In [3]: list(range(1, 5)) # range(start, stop)
Out[3]: [1, 2, 3, 4]
start、stop、stepすべてを設定する。
stepを2にすると、値の間隔が2になる。
# start = 0, stop = 5, step = 1(In [1]、In [2]と同じ)
In [4]: list(range(0, 5, 1)) # range(start, stop, step)
Out[4]: [0, 1, 2, 3, 4]
# start = 1, stop = 6, step = 2
In [5]: list(range(1, 6, 2)) # range(start, stop, step)
Out[5]: [1, 3, 5]
stopは、stepで割り切れなくてもよい。
# start = 1, stop = 5, step = 2
In [6]: list(range(1, 5, 2)) # range(start, stop, step)
Out[6]: [1, 3]
stepに0を設定すると、エラー(ValueError)になる。
# start = 1, stop = 5, step = 0
In [7]: list(range(1, 5, 0)) # range(start, stop, step)
ValueError: range() arg 3 must not be zero
stepが負(逆から)の場合
rangeの内容は、正の場合と同じで、r[i] = start + step * i
制約条件は、i >= 0 かつ r[i] > stop
注意する点は、stopで設定した値は、rangeには含まれません。
start、stop、stepすべてを設定する。
start > stop
stepを-1にする。
# start = 5, stop = 0, step = -1
In [8]: list(range(3, 0, -1)) # range(start, stop, step)
Out[8]: [3, 2, 1]
式にあてはめると、i >= 0なので、
i = 0: r[0] = 3 + -1 * 0 = 3 → r[0] > stop: 0
i = 1: r[1] = 3 + -1 * 1 = 2 → r[1] > stop: 0
i = 2: r[2] = 3 + -1 * 2 = 1 → r[2] > stop: 0
i = 3: r[3] = 3 + -1 * 3 = 0 → r[3] = stop: 0
i = 3のとき、値の制約を満たさない。
stopは、負の値をとれる
# start = 3, stop = -3, step = -1
In [9]: list(range(3, -3, -1)) # range(start, stop, step)
Out[9]: [3, 2, 1, 0, -1, -2]
for文で繰り返し処理
range関数は、for文で繰り返し処理する回数の指定に使用します。
range関数で繰り返し
# 3回の繰り返し In [9]: for i in range(3): # [0, 1, 2] print(i) Out[9]: 0 1 2
for文は、range(3)の内容[0, 1, 2]から値を1つずつ取り出します。
ここでは取り出した値を表示する処理が、range(3)の値の個数だけ繰り返されています。
繰り返し処理の回数の、range関数の値の個数のため、range(1, 4)でも3回の処理されます。
# 3回の繰り返し In [9]: for i in range(1, 4): #[1, 2, 3] print(i) Out[9]: 1 2 3
リスト(配列)の要素数で繰り返し
range関数は、リスト(配列)と組み合わせてfor文に使用します。
In [10]: name = ['ポ', 'テ', 'サ', 'ラ'] for i in range(len(name)): print(name[i]) Out[10]: ポ テ サ ラ
リスト型のnameには、文字列が4つ入っています。
len関数は、リストのサイズを取得する関数なので、len(name)から4を取得できます。
len(name)は、range関数の中にあるので、range(4)となります。
for文は、range(4)の内容[0, 1, 2, 3]から値を1つずつ取り出します。
i = 0: print(name[0]) → name[0]: ポ
i = 1: print(name[1]) → name[1]: テ
i = 2: print(name[2]) → name[2]: サ
i = 3: print(name[3]) → name[3]: ラ
リスト型nameの値を、1文字ずつ表示することができました。
これは、range関数のサイズで繰り返しの回数を指定し、range関数の値でリスト(配列)の要素を指定しています。
まとめ
- range関数を使って、連続する数を作ることができました
- for文と組み合わせて、繰り返し処理の回数を指定することができました
- len関数と組み合わせて、リストのサイズで、連続する数を作ることができました