Pythonでプログラミングを行う際、for ループ(繰り返し処理)を「5回だけ実行したい」や、「10から20までの連続した数値が欲しい」といった場面が頻繁にあります。
このような場合に使うのが range() 関数です。range() は、それ自体がリスト(list)なのではなく、指定されたルールの「連続した数値シーケンス(数列)」を生成するためのオブジェクトです。
この記事では、range() の基本的な使い方を3つのパターンに分けて解説します。range() オブジェクトの中身は、list() 関数で囲むことでリストとして確認できます。
1. range(stop) – 引数が1つの場合 (0から開始)
range() に引数を1つだけ(stop)指定すると、0から始まり、stop の手前(stop - 1)までの整数のシーケンスが生成されます。
# 0 から 5 の手前 (4) までのシーケンス
seq1 = range(5)
print(f"range(5) -> {list(seq1)}")
実行結果:
range(5) -> [0, 1, 2, 3, 4]
2. range(start, stop) – 引数が2つの場合 (開始と終了)
引数を2つ(start, stop)指定すると、start から始まり、stop の手前(stop - 1)までのシーケンスが生成されます。
# 100 から 103 の手前 (102) までのシーケンス
seq2 = range(100, 103)
print(f"range(100, 103) -> {list(seq2)}")
実行結果:
range(100, 103) -> [100, 101, 102]
3. range(start, stop, step) – 引数が3つの場合 (ステップ指定)
引数を3つ(start, stop, step)指定すると、start から stop の手前まで、step おきに(step の間隔で)シーケンスが生成されます。
# 10 から 31 の手前まで、10 ずつ増やしながら
seq3 = range(10, 31, 10)
print(f"range(10, 31, 10) -> {list(seq3)}")
実行結果:
range(10, 31, 10) -> [10, 20, 30]
4. step に負の値を指定(逆順)
step に負の値を指定すると、start から stop に向かって減少していくシーケンス(逆順)を生成できます。この場合、start は stop よりも大きい値である必要があります。
# 3 から 0 の手前 (1) まで、-1 ずつ減らしながら
seq4 = range(3, 0, -1)
print(f"range(3, 0, -1) -> {list(seq4)}")
実行結果:
range(3, 0, -1) -> [3, 2, 1]
stop に指定した 0 は含まれない点に注意してください。
for ループでの活用
range() は、list() で変換しなくても for ループで直接使用するのが最も一般的です。これにより、巨大なリストをメモリ上に作成することなく、効率的に繰り返し処理を実行できます。
print("--- ループ開始 ---")
# 0, 1, 2 の 3回ループする
for i in range(3):
print(f"現在の i の値: {i}")
print("--- ループ終了 ---")
実行結果:
--- ループ開始 ---
現在の i の値: 0
現在の i の値: 1
現在の i の値: 2
--- ループ終了 ---
まとめ
range(stop): 0からstop-1までrange(start, stop):startからstop-1までrange(start, stop, step):startからstepおきにstop-1までstepに負の値を指定すると逆順のシーケンスを作成できます。forループと組み合わせて使うのが最も一般的です。
