range関数ってどうやって使うの?
Pythonに欠かせない関数の1つに数列を作成できるrange関数があります。
この記事では、range関数の詳細についてその様々な応用例について解説します。
range関数とは
Pythonのrange関数は、指定した範囲の連続した整数を生成するために使用されます。
range関数の公式は、次のような形式です
range(start, stop, step)
→start start+step start+2*step … stop-step
range(start, stop)
→start start+1 start+2 … stop-1
range(stop)
→0 1 2 … stop-1
上の形式では、startは数列の開始位置、stopは数列の終了位置(この値は含まれないことに注意)、stepは数列の増加量を指定します。これをパターン①と呼びましょう。
真ん中の形式ではstartは数列の開始位置、stopは数列の終了位置(この値は含まれないことに注意)を指定します。stepを省略したとき、stepは1です。これをパターン②と呼びましょう。
下の形式では、stopは数列の終了位置(この値は含まれないことに注意)を指定します。startを省略したとき、startは0です。パターン③と呼びましょう。
引数の数(カンマで区切られている文字の数)が3つなら上の形式、2つなら真ん中、1つなら下のように指定されます。
range関数は高校数学の「等差数列」に近いです
等差数列は覚えていないし、文字だらけでよくわからないです…
そうですね。では実際に以下の例を見てみましょう
range関数の使用例
例1
range(2, 8)
→2 3 4 5 6 7
このコードは変数が2つ、つまりstepが省略されているのでパターン②ですね。
なので2から7(=8 -1)までの整数を生成し、それぞれの値を出力します。
例2
range(2,16,2)
→2 4 6 8 10 12 14
このコードは変数が3つ、つまりパターン①ですね。
なので2から14(= stop–step = 16-2)までの整数を生成し、それぞれの値を出力します。
例3
range(5)
→0 1 2 3 4
このコードは変数が1つ、つまりパターン③ですね。
なので0から4(= 5-1)までの整数を生成し、それぞれの値を出力します。
例4
stepに負の整数を入れることもできます。
その場合start>stopになるようにしましょう。(理由は後述)
range(8,3,-1)
→8 7 6 5 4
このコードは変数が3つ、つまりパターン③ですね。そして3つ目の変数が-1です。
なので8から4(= stop–step = 3-(-1))までの整数を生成し、それぞれの値を出力します。
stepが正の整数の時はstart<stopに、負の整数の時はstop>startにしましょう。なにも出力されなくなります。
range関数を使って実際に数列を生成するには
range関数を使用して実際に数列を生成しようとするとprint関数とlist関数を使用する必要があります。
その例について一緒に見てみましょう!
list関数(リスト)やprint関数についてわからない方は下の記事からどうぞ!
numbers = list(range(1, 10, 2))
print(numbers)
このコードは、1から9までの整数を2ずつ増加させながら生成し、それらをリストに格納しています。結果として、出力されるリストは以下となります。
[1, 3, 5, 7, 9]
このように、range関数はprint関数とlist関数を使用することで、数列を簡単に生成することができます。
for文でのrange関数の使用
range関数は、for文と組み合わせることがとても多いです。
for文についてわからない方はこちらからどうぞ!
例1
for i in range(5):
print(f"Count: {i}")
このコードは、range(5)の計算結果をひとつづつ i に代入していき出力します。結果として、出力されるのは以下となります。
Count: 0
Count: 1
Count: 2
Count: 3
Count: 4
例2
for _ in range(5):
print(f"りんご")
このコードは「りんご」という文字列をrange(5)の個数だけ出力します。
range(5)の個数は 0 1 2 3 4で5つです。
結果として、出力されるのは以下となります。
りんご
りんご
りんご
りんご
りんご
for文に利用可能なrange関数はパターン③の時だけですか?
もちろんそんなことはありません。いずれのパターンでも利用可能です。
例3
ではfor文のrange関数をパターン①の場合で表してみましょう。
for _ in range(1,14,4):
print(f"たまねぎ")
このコードは「たまねぎ」という文字列をrange(1,14,4)の個数だけ出力します。
range(1,14,4)の個数は 1 5 9 13なので4つです。
結果として、出力されるのは以下となります。
たまねぎ
たまねぎ
たまねぎ
たまねぎ
このように、range関数を使用すると、繰り返し処理に便利な数列を生成することができます。
プログラミングの幅が広がりました!
range関数を使用したリスト内包表記
range関数は、リスト内包表記と組み合わせても利用することができます。以下の例を見てみましょう。
リスト内表記に関する記事はこちらからどうぞ!
例
squares = [x ** 2 for x in range(5)]
print(squares)
このコードはrange(5)、つまり0から4までの整数を2乗した値をリストに格納しています。
結果として、出力されるのは以下となります。
[0, 1, 4, 9, 16]
このように、range関数を使用すると、リスト内包表記をより簡潔に書くことができるというわけですね。
range関数のよくある間違い
range関数を使用する際によくある間違いをいくつか紹介します。
間違い1
stepが正の整数の時にstartの値がstopの値以上になっている場合、もしくはstepが負の整数の時にstartの値がstopの値以下になっている場合、空の数列が生成されます。次の例を見てみましょう。
numbers = list(range(5, 1))
print(numbers)
[]
このコードの出力結果は空のリストとなります。
numbers = list(range(1, 5, -2))
print(numbers)
[]
このコードの出力結果もまた空のリストとなります。
間違い2
start,stop,stepは10進数の整数(-3,0,5など)でなければなりません。小数(0.2)や無理数(πなど)、非10進数はエラーとなります。
10進数についての記事は下からどうぞ!
numbers = list(range(5.2))
print(numbers)
TypeError: 'float' object cannot be interpreted as an integer
型(float型、int型など)についての記事は下からどうぞ!
他にも
numbers = list(range(2f))
print(numbers)
SyntaxError: invalid decimal literal
以上が、range関数を使用する際によくある間違いの例です。
まとめ
この記事では、Pythonのrange関数について詳しく解説しました。
Pythonのrange関数は、プログラミングの基礎となる重要な機能です。ぜひ、活用して効率的なコーディングを行いましょう。
この記事がPythonの初心者の方にとって役立つ情報となれば幸いです。