Pythonの range() の使い方と注意点
はじめに
Pythonで繰り返し処理を書くときに、よく登場するのが range()
関数です。
特に、for
文と一緒に使うことで「指定した回数だけ繰り返す」や「インデックス付きで処理をする」といった場面で重宝します。
本記事では、range()
の基本的な使い方と注意点について解説します。
1. 基本の使い方
range()
は、指定した範囲の「整数の連続した値」を生成する関数です。
temp = range(5)
print(list(temp)) # [0, 1, 2, 3, 4]
-
range(n)
と書くと、0から n-1 までの整数が生成されます(n は含まれない点に注意) -
list()
で囲むと、実際の値をまとめて確認できます-
range
は、for 文などで1つずつ値を取り出せる「イテラブル(反復可能なもの)」です(※詳しくは後述)
-
2. 開始値・終了値・ステップを指定
range(開始, 終了, ステップ)
例:
print(list(range(1, 6))) # [1, 2, 3, 4, 5]
print(list(range(0, 10, 2))) # [0, 2, 4, 6, 8]
-
0以外の数字から始めたいときは、開始と終了の2つの数字を指定します
-
数字をいくつずつ増やすか(ステップ)も指定できます
- たとえば
range(0, 10, 2)
は「0から始めて2ずつ増やす」 →[0, 2, 4, 6, 8]
- たとえば
3. for文と組み合わせる
range()
は for
文と相性が良いです。
fruits = ["apple", "banana", "orange"]
for i in range(len(fruits)):
print(i, fruits[i])
出力:
0 apple
1 banana
2 orange
リストのインデックスを使って処理したいときに、range(len(リスト))
がよく使われます。
※ len()
の基本についてはこちら → Pythonの len() の使い方と注意点
また、インデックス付きでループしたいときは enumerate()
を使うとより簡潔に書けます。
→ Pythonの enumerate() の使い方
range(1, len(list))
は 0番目をスキップする
4. 注意点:リストのインデックスに range(1, len(list))
を使うと、
0番目の要素がスキップされてしまうので注意が必要です。
nums = [10, 20, 30]
for i in range(1, len(nums)):
print(nums[i]) # 20, 30
0から始める必要があるときは、range(len(list))
を使いましょう。
range()
の出力はリストではない
5. 注意点:Python 3 以降、range()
はリストそのものではなく、順番に取り出せる特別なオブジェクト(range
オブジェクト)を返します。
r = range(5)
print(r) # range(0, 5)
print(type(r)) # <class 'range'>
このままでは中身が見えにくいので、リストとして扱いたいときは list()
で変換します。
print(list(r)) # [0, 1, 2, 3, 4]
💡 この「順番に取り出せるオブジェクト」のことを、Pythonでは「イテラブル(iterable)」と呼びます。
繰り返し処理(for文など)で使えるのが特徴です。
range()
はメモリ効率を良くするため、すべての値を事前に保持せず、必要なときに1つずつ取り出す仕組みになっています。
おわりに
range()
は、Pythonで繰り返し処理をするときによく使われます。
ただし、
- 0から始まる
- 終了の値は含まれない
- そのままでは中身が見えない(
range(5)
のままでは[0, 1, 2, 3, 4]
のようには表示されない)ため、中身を確認したいときはlist()
で変換する
といった特徴があるため、初心者がつまずきやすいポイントでもあります。
実務でも for
文や len()
、enumerate()
と一緒に使うことが多いので、
基本を押さえておくことで、少しずつPythonの書き方に慣れていけるはずです。
本記事が参考になれば幸いです。
Discussion