「range関数ってプログラム中でよく見かけるけど結局どんな機能があるの?」
「for文でrange関数を使用する方法を知りたい」
といったお悩みをお抱えの方はいませんか?
range関数を特定の値を繰り替えし作成していくれるという便利な関数です。
今回はそんなrange関数の使用方法について解説していきます。
range関数とは?
range関数について先ほど簡単に説明しましたが、もう一度解説しておきます。
range関数は指定した範囲の値を反復的に作成してくれる関数で、そのまま作成した数値を使用することも可能ですし、for文で使用することで簡単にループを実現することもできます。
ではそんなrange関数についての機能について解説していきます。
range関数の基本的な使用方法
そんなrange関数の記載方法ですが、下記のように入力することで使用することができます。
range(初期値,終了値[,スキップ数])
それぞれの設定値の説明は下記の通りとなります。
- 初期値:作成する要素の最初の値を設定する。省力した場合は0となる
- 終了値:作成する要素の最後の値+1を設定する。(つまり記載した値は作成されない)
- スキップ数:いくつおきに要素を作成するのかを指定する。省略時は1となる。
ただこれだけですと戻り値がrangeオブジェクトのため下記のような出力結果となります。
【コード】
print(range(10))
【実行結果】
range(0, 10)
range関数はlistやtupleなどと同様にイテラブルなオブジェクトとなっています。
イテラブルなオブジェクトとは一つの変数に複数の要素があり、for文などを使用して反復的に各要素を取り出すことが可能なオブジェクトのことを言います。
そんためlist内にrange関数を含めることが可能で、下記のように繰り返し要素を作成することができます。
【コード】
print(list(range(10)))
【実行結果】
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range関数のスキップ数について
range関数には初期値、終了値、スキップ数の3つを設定することができましたが、このスキップ数についてまだ理解できていない方もいるかもしれないので、実際の使用例を基に解説していきます。
まずスキップ1ですと下記の通り値が一つずつ作成することができます。
【コード】
print(list(range(0,10,1)))
【実行結果】
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ではスキップ2ですとどうなるでしょうか?
【コード】
print(list(range(0,10,2)))
【実行結果】
[0, 2, 4, 6, 8]
このように1つ飛ばしで値を作成することができます。
スキップ3ですと下記のように2つ飛ばしで作成しています。
【コード】
print(list(range(0,10,3)))
【実行結果】
[0, 3, 6, 9]
つまりスキップ1ですと下記のように値を一つずつ作成することとなります。
そしてスキップ2ですと値は二つずつ作成されます。
スキップのイメージとしてはこのような感じです。
スキップ数をマイナスにすると?
スキップ数にはマイナスを設定することも可能です。
その場合初期値から値が引かれていきます。
例えばスキップ数を-1とすると下記のような実行結果となります。
【コード】
print(list(range(10,0,-1)))
【実行結果】
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
因みに終了値を-4とかにしてマイナスの値を作成することも可能です。
【コード】
print(list(range(10,-4,-1)))
【実行結果】
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3]
空からの値を返す
プログラムを記載しているとたまに矛盾する記載方法でコードを書いてしまうことがあります。
下記のように0から10まで-1ずつ作成するという記載方法になった場合は空の値が返されます。
【コード】
print(list(range(0,10,-1)))
【実行結果】
[]
これは矛盾した値を作成しようとしたためです。
その他にも下記のように終了値をマイナスで記載した場合も空が返されます。
【コード】
print(list(range(-1)))
【実行結果】
[]
これは初期値・スキップ数が省略されているため初期値:0、スキップ数:1がデフォルト値として入っているため0から-1へ1ごとに値を作成するというのが矛盾した設定値となるためです。
このような場合に空の値が作成されるため、コードを書いていて空の値しか作成できず困っている、なった場合はこの辺りを重点的に見てみることをオススメします。
range関数をfor文で使用する方法
range関数がその本領を発揮するのがfor文で使用した場合です。
以前の下記記事でもfor文でrange関数を使用する方法についてご紹介しました。
【python】for文の基本 | エンジニアKISARAGIの備忘録 (kisaragi-it.com)
通常のfor文はlist等に入っている値を一つずつ取得するという方法で使用します。
しかし時には指定回数だけfor文をループさせたいとなる場合はありませんか?
そのような時にこのrange関数を使用することで簡単に行えます。
【コード】
for i in range(5):
print("繰り返し実行します")
【実行結果】
繰り返し実行します
繰り返し実行します
繰り返し実行します
繰り返し実行します
繰り返し実行します
上記は「繰り返し実行します」という出力結果を5回実行したい場合に使用します。
このようにとても簡単に指定回数文だけfor文繰り返すことができます。
Javaですと下記のように記載するのですが、見ていただいたら分かる通り少し初心者には分かりにくく、慣れている人でも記載するのが面倒に感じるものとなっています。
【Javaでのfor文記載例】
for(int i=0;i<5;i++) {
print("繰り返し実行します");
}
そう思うとpythonでrange関数を使用したfor文がとても分かりやすく、簡単に記載できることが分かっていただけるかと思います。
range関数で少数を使用する方法
最後にご紹介するのはrange関数で少数を使用する方法です。
通常は整数のみがrange関数では作成可能で、無理やり作成しようとすると下記のようにエラーが発生します。
【コード】
print(list(range(0.1,1,0.1)))
【実行結果】
print(list(range(0.1,1,0.1)))
TypeError: 'float' object cannot be interpreted as an integer
そこで少し工夫して下記のようにrange関数外で少数化させることで少数の作成を疑似的に行うことが可能です。
【コード】
print([i/10 for i in list(range(1,10,1))])
【実行結果】
[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
もう少し簡単に書く方法として下記のような記載方法もあります。
【コード】
for syou in range(10):
print(syou/10)
【実行結果】
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
ここまででrange関数で小数を使用する方法について解説してきましたが、やはりどこか使用しにくい印象を受けた方は多いのでないでしょうか?
そこでもっと簡単に少数を使用する方法をご紹介します。
ただそのためには少し準備が必要です。
どういった準備かというとNumPyというライブラリを入れるというものです。
入れ方はまたどこかの記事で解説しますので、今回は割愛しますが、自分が使用しているVSCodeではとても簡単にインストールできたので是非試してみてください。
NumPyを入れ終わると下記のようにコードを記載するだけで簡単に少数を作成することができます。
【コード】
import numpy as np
print(np.arange(0.1,1,0.1))
【実行結果】
[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
まとめ
この記事ではpythonのrange関数について解説してきました。
- range関数とは?
- range関数をfor文で使用する方法
- range関数で少数を使用する方法
range関数はfor文で使用することでその本領を発揮します。
また整数だけでなく、少し工夫すれば少数も扱うことができるようになっています。
以上で今回の記事は終了となります。
コメント