Pythonで繰り返し処理を行う際に欠かせないのがrange()
関数です。特にfor
文との組み合わせは、Python初心者から上級者まで幅広く使われています。しかし、「rangeの使い方がいまいちピンとこない」「startやstepの指定ってどうするの?」と感じている方も多いのではないでしょうか。この記事では、Pythonのrange()
関数の基本的な使い方から、応用例、注意点までをわかりやすく解説していきます。これを読めば、range()
の疑問はすべて解消できるはずです。
range()関数とは何か?
range()
は、指定された範囲の整数を生成するPythonの組み込み関数です。主に繰り返し処理で利用され、数値の列を生成するために使われます。たとえば、for
ループと一緒に使うことで、一定回数処理を繰り返すことができます。
for i in range(5):
print(i)
このコードは、0から4までの整数を出力します(つまり、5回繰り返します)。range(5)
は、「0から始まり、5未満までの整数」を意味します。
基本的な使い方:引数1つ
最もシンプルな使い方は、引数を1つだけ指定する方法です。
range(stop)
この場合、start
はデフォルトで0、step
は1となり、0からstop - 1
までの整数が生成されます。
例:
for i in range(3):
print(i)
出力:
コピーする編集する0
1
2
引数を2つ使う:開始値を指定
range(start, stop)
この形式では、start
から始まり、stop
未満までの整数を生成します。
例:
for i in range(2, 5):
print(i)
出力:
2
3
4
引数を3つ使う:ステップを指定
range(start, stop, step)
この形式では、start
から始まり、stop
未満まで、step
ずつ増加(または減少)させながら数値を生成します。
例1(正のステップ):
for i in range(1, 10, 2):
print(i)
出力:
コピーする編集する1
3
5
7
9
例2(負のステップ):
for i in range(5, 0, -1):
print(i)
出力:
コピーする編集する5
4
3
2
1
range()で作られるオブジェクトの正体
range()
はイテラブル(繰り返し可能な)オブジェクトを返しますが、そのままではリストではありません。確認してみましょう。
r = range(3)
print(type(r))
出力:
javascriptコピーする編集する<class 'range'>
リストに変換するには、list()
関数を使います。
print(list(range(3)))
# [0, 1, 2]
range()のメリット:メモリ効率がよい
range()
は、数値のリストをすべてメモリ上に保持しているわけではありません。必要なときに次の値を計算する「遅延評価」が使われています。そのため、たとえrange(1000000)
のような大きな範囲でも、メモリをほとんど使いません。
これは、次のようなコードが問題なく動作することを意味します。
for i in range(1000000):
pass # 何もしない
range()を使ったよくあるパターン
インデックスと要素を同時に使いたいとき
fruits = ['apple', 'banana', 'cherry']
for i in range(len(fruits)):
print(f"{i}: {fruits[i]}")
出力:
0: apple
1: banana
2: cherry
ただし、こういう場合はenumerate()
のほうがよりPythonicです。
for i, fruit in enumerate(fruits):
print(f"{i}: {fruit}")
逆順にループ
for i in range(10, 0, -1):
print(i)
これは、10から1までのカウントダウンになります。
偶数・奇数を取り出す
偶数だけ:
for i in range(0, 10, 2):
print(i)
奇数だけ:
for i in range(1, 10, 2):
print(i)
range()の注意点とエラー例
stop値に0を指定しても出力されない
for i in range(0):
print(i)
# 何も表示されない
stepに0を指定するとエラーになる
for i in range(1, 5, 0):
print(i)
出力:
ValueError: range() arg 3 must not be zero
range()と他の関数との組み合わせ
sum()で合計を計算
total = sum(range(1, 101))
print(total)
# 5050
zip()との組み合わせ
names = ['Alice', 'Bob', 'Charlie']
scores = [80, 90, 70]
for i in range(len(names)):
print(f"{names[i]} scored {scores[i]}")
またはよりよい方法として:
for name, score in zip(names, scores):
print(f"{name} scored {score}")
range()関数を使いこなすことの重要性
range()
はシンプルな構文ながら、繰り返し処理のあらゆる場面で役に立つ非常に重要な関数です。Pythonでのループ処理を理解するためには、range()
の挙動を正しく把握しておくことが不可欠です。特に、step
を使ったカスタマイズや、list()
への変換、他の関数との組み合わせは実用的なスキルとして覚えておきたいところです。
まとめ
range()
は、整数のシーケンスを生成する関数- 引数は最大3つ(
start
,stop
,step
) - メモリ効率が高く、大量の数値でも扱いやすい
for
ループやsum()
,zip()
などとの組み合わせが便利- エラーになりやすいポイント(step=0など)に注意
Python初心者にとってrange()
をマスターすることは、より効率的で読みやすいコードを書く第一歩となります。ぜひ実際にコードを書きながら、挙動を確認してみてください。