🔖

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() の使い方

4. 注意点:range(1, len(list)) は 0番目をスキップする

リストのインデックスに 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)) を使いましょう

5. 注意点:range() の出力はリストではない

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