このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】range関数を用いたfor文

range関数を用いたfor文

 Pythonのfor文は、イテラブルなオブジェクトから要素を一つずつ取り出し、同じ処理を繰り返すための強力な制御構造です。特に、range関数を組み合わせることで、特定の範囲の整数列を生成し、ループの回数や繰り返しパターンを柔軟に指定できます。
 ここでは、range関数の基本的な使い方と、for文との組み合わせによる繰り返し処理について、具体例や表を用いて分かりやすく解説します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.range関数の基本

1.1. range関数の目的と特徴

 range関数は、指定した範囲の整数列(rangeオブジェクト)を生成します。rangeオブジェクトはメモリ効率が良く、大量の整数を扱う場合でも高速に動作します。

range関数は、主に以下の3通りの書式で利用されます。

書式説明
range(終了値)0から終了値-1までの整数列を生成
range(開始値, 終了値)開始値から終了値-1までの整数列を生成
range(開始値, 終了値, ステップ)開始値から終了値-1まで、スキップ数(ステップ)を指定

解説

  • 終了値のみの場合、例えば range(5) は0, 1, 2, 3, 4の整数列を生成します。
  • 開始値と終了値を指定する場合、range(5, 11) は5から10までの整数列を生成します(終了値は含まれません)。
  • ステップ値を加えると、range(2, 20, 3) は2から始まり、3ずつ増加して値が生成され、20に達する前に終了します。

1.2. 基本例:range関数を使った整数列の生成

以下の例では、3通りの書式をそれぞれ用いて整数列を生成し、結果を表示します。

# 終了値のみを指定した場合(0から4まで)
print("range(5):", list(range(5)))
# 出力例: range(5): [0, 1, 2, 3, 4]

# 開始値と終了値を指定した場合(5から10まで)
print("range(5, 11):", list(range(5, 11)))
# 出力例: range(5, 11): [5, 6, 7, 8, 9, 10]

# 開始値、終了値、ステップ値を指定した場合(2から20まで、3ずつ)
print("range(2, 21, 3):", list(range(2, 21, 3)))
# 出力例: range(2, 21, 3): [2, 5, 8, 11, 14, 17]

実行結果

range(5): [0, 1, 2, 3, 4]
range(5, 11): [5, 6, 7, 8, 9, 10]
range(2, 20, 3): [2, 5, 8, 11, 14, 17]

解説

  • list(range(...)) を使うことで、生成されたrangeオブジェクトをリストに変換し、確認しやすくしています。
  • それぞれの書式で生成される整数列の範囲やステップが異なることに注意してください。

2.for文とrange関数の組み合わせ

2.1. 基本的なfor文の使い方

 for文は、range関数で生成された整数列を反復処理するために広く使われます。基本構文は以下の通りです。

for 変数 in range(開始値, 終了値, ステップ):
    文...

以下のプログラムでは、5から15までの整数を1ずつ増加させながら表示します。

for num in range(5, 16):
    print(num, end=' ')
# 出力例: 5 6 7 8 9 10 11 12 13 14 15

実行結果

5 6 7 8 9 10 11 12 13 14 15 

解説

  • 変数 numrange(5, 16) によって5から15までの整数が順に代入されます。
  • print(num, end=' ') により、各整数が空白区切りで同じ行に出力されます。
  • 終了値は16と指定することで、15までが範囲に含まれることに注意してください(終了値は含まれません)。

2.2. ステップ値を用いた繰り返し

range関数ではステップ値を指定できるため、特定の間隔での繰り返し処理が可能です。

例1:偶数の表示

以下の例では、30から40までの偶数を2ずつ増加させながら表示します。

for n in range(30, 41, 2):
    print(n, end=' ')
# 出力例: 30 32 34 36 38 40

実行結果

30 32 34 36 38 40 

例2:負のステップによるカウントダウン

以下の例では、10から0までを1ずつ減少させながら表示します。

for n in range(10, -1, -1):
    print(n, end=' ')
# 出力例: 10 9 8 7 6 5 4 3 2 1 0

実行結果

10 9 8 7 6 5 4 3 2 1 0 

解説

  • ステップ値を正の数にすれば昇順、負の数にすれば降順での繰り返しが可能です。
  • 負のステップを用いる場合、開始値よりも小さい値までループが続くように、終了値を適切に設定する必要があります。

3.rangeオブジェクトの特徴と注意点

3.1. rangeオブジェクトはイテラブル

 range関数は、指定した範囲の整数列を生成し、これをrangeオブジェクトとして返します。このオブジェクトはfor文などの反復処理に利用でき、メモリ効率が非常に良いのが特徴です。

3.2. range関数の終了値の扱い

 range関数で指定する終了値は、実際の範囲に含まれません。たとえば、range(5, 16) は5から15までの整数を生成します。この仕様は、スライス記法と同様です。

まとめの表

書式生成される整数列説明
range(終了値)0 から 終了値-1終了値は含まれない
range(開始値, 終了値)開始値 から 終了値-1開始値から開始し、終了値は含まれない
range(開始値, 終了値, ステップ)開始値 から ステップずつ増加(または減少)ステップ値に応じた間隔で整数列を生成(終了値は含まれない)

まとめ

 range関数は、for文と組み合わせることで、指定した回数や範囲で繰り返し処理を行うための基本ツールです。

  • 基本的な使い方として、range関数は開始値、終了値、ステップ値を指定して整数列を生成し、for文の反復処理に利用されます。
  • ステップ値を利用すれば、一定の間隔での反復処理や、負のステップによるカウントダウンも容易に実現できます。
  • rangeオブジェクトの特徴として、終了値は含まれないこと、イテラブルであるためメモリ効率が高いことが挙げられます。

 これらの知識を活かして、for文とrange関数を使った繰り返し処理を効率的かつ正確に実装し、プログラムの自動化やループ処理の最適化に役立てましょう。