Pythonのrange関数で一定間隔の数列(等差数列)を生成するのイメージ画像

Pythonのrange関数で一定間隔の数列(等差数列)を生成する

  • 公開日:2018/10/25
  • 更新日:2018/10/25
  • 投稿者:n bit

Pythonで一定間隔の数字の配列を生成したいときに使用する組み込み関数『range関数』について解説。range関数は実際のプログラミングでも非常に出番の多い組み込み関数です。

  • Python

この記事は約 分で読めます。(文字)

range関数とは

range関数とはPythonで一定間隔に空いた数字の配列(連番や等差数列)を生成することができる組み込み関数です。

range関数は0から始まる数列を生成します。引数に指定することで開始の数値や数値間隔も変更できます。

生成できる数列の例

  • 0, 1, 2, 3, 4, …
  • 5, 7, 9, 11, 13, …

Note

等差数列

等差数列(とうさすうれつ、英: arithmetic progression, arithmetic sequence;)とは、「隣接する項が共通の差(公差)を持つ数列」を言う。

例えば、5, 7, 9, 11, 13, … は公差 2の等差数列である。

参照:等差数列 - Wikipedia

range関数の使い方

では早速range関数を使ってみましょう。

range関数で0から始まる数列を生成

range関数は引数に終端値のみ指定することで0から終端値未満の数値の配列を生成します。range関数で最も基本的な使い方です。

range(終端値)

では実際に終端値に実数を入れて確認してみましょう。

x = range(5)

print(x)

出力結果

range(0, 5)

[0, 1, 2, 3, 4]のような表示を期待したと思いますが返された値をそのままprint関数で出力すると見慣れない値が表示されました。これは0から始まり5未満の数字配列を生成する設定になっていることを表しています。

range関数で1つ注意しておくべき点としては生成される数字の配列は指定時に実態を持った配列オブジェクトになっているわけではなく配列を生成する用意を行っているだけという事です。

実際にその指定した数値の配列を実態を持って呼び出すためにはfor文などを利用する必要があります。

x = range(5)

for i in x:
print(i)

出力結果

0

1
2
3
4

[0, 1, 2, 3, 4]のリストオブジェクトをfor文で取得した時と同じ出力結果を得ることができましたね。

  • for文で利用時:range(5) ≒ [0, 1, 2, 3, 4]

このようにrange関数ではfor文等を使って出力したときにだけ生成する数値の配列データを逐次出力しリストのように振る舞います。

range関数は事前に生成しているわけではありませんので配列内に格納する要素数が多いときリストオブジェクトに比べてメモリースペースの容量を節約できるのがメリットです。

この動作にはイテラブル (iterable)やイテレータ(iterator)といったものが関わってくるのですが、詳しくはまた別のページで解説します。今はrange関数の数字配列はfor文等を使って呼び出して利用するとリストオブジェクトのように扱えると理解してきましょう。

range関数で任意の番号から始まる数列を生成

今度はrange関数で生成する数列の開始番号をコントロールします。第一引数に指定したい開始番号を、第二引数に終端値を渡すことで指定開始番号から終端値未満までの数列が生成されます。

range(開始番号, 終端値)

開始番号と終端値に実数を入れて確認してみましょう。

x = range(10, 15)

for i in x:
print(i)

出力結果

10

11
12
13
14

開始番号が引数に指定した数字から始まる数列に変更されていることが確認できます。

終端値に入れる数値は必ず開始番号よりも大きな数字を指定してください。開始番号よりも終端値が小さい場合は何も生成されません。

x = range(10, 8)

for i in x:
print(i)

出力結果

何も生成されない

range関数で等間隔に空いた数列を生成

第一引数に指定したい開始番号を、第二引数に終端値を、第三引数にステップ値(増加量)を渡すことで指定開始番号から終端値未満までステップ値の間隔を空けた数列が生成されます。

range(開始番号, 終端値, ステップ値)

開始番号、終端値、ステップ値に実数を入れて確認してみましょう。

x = range(10, 36, 5)

for i in x:
print(i)

出力結果

10

15
20
25
30
35

開始番号からステップ値の間隔に空いた数列に変更されていることが確認できます。

終端値に入れる数値は必ず生成したい要素数×ステップ値+1の数字になるよう指定してください。

  • 終端値 = 生成したい要素数 × ステップ値 + 1

終端値が上記計算の結果よりも小さな場合は必要な要素数が生成されなくなります。また開始番号よりも終端値が小さい場合は何も生成されません。

要素数が不足する場合

x = range(10, 15, 5)

for i in x:
print(i)

出力結果

10

要素数が何も生成されない場合

x = range(10, 8, 5)

for i in x:
print(i)

出力結果

何も生成されない

range関数でマイナス値の数列を生成

range関数はマイナス値の数列にも対応しています。引数に渡す数値すべてにマイナスをつけることで生成できます。

x = range(-10, -36, -5)

for i in x:
print(i)

出力結果

-10

-15
-20
-25
-30
-35

range関数で逆順の数列を生成

range関数は第三引数のステップ値にマイナスの数値を渡すことで逆順の数列を生成することもできます。この場合は値が小さくなっていきますので終端値には開始番号よりも小さな値を指定してください。

x = range(10, 0, -1)

for i in x:
print(i)

出力結果

10

9
8
7
6
5
4
3
2
1

range関数で浮動小数点の数列を生成

range関数は浮動小数点に対応していません。引数に渡せる数値は整数のみで浮動小数点を渡した場合は下記のようなエラーが表示されます。

x = range(0.1, 1, 0.3)

for i in x:
print(i)

出力結果

TypeError: ‘float’ object cannot be interpreted as an integer

そのため整数で出力した値を加工して浮動小数点として扱う必要があります。

x = range(2, 5, 2)

for i in x:
i = i * 0.1
print(i)

出力結果

0.2

0.4

今日のdot

range関数はリストオブジェクトに比べてメモリスペースを節約しながら簡単に連番や等差数列を生成できる組み込み関数です。