Python | 文法の基本:range()

Python
スポンサーリンク

range() の概要(整数の並びを効率的に作る)

range() は「連続する整数のシーケンス」を生成するための組み込み関数です。for ループと相性が良く、指定した範囲の整数を必要なときに1つずつ取り出す、メモリ効率のよい“イテラブル”を返します。代表的な形は range(stop)、range(start, stop)、range(start, stop, step) の3種類です。終了値(stop)は含まれない半開区間で、ステップは0にできません。


基本の使い方(start・stop・step と半開区間)

1引数・2引数・3引数の違い

  • range(n): 0 から n−1 まで
  • range(a, b): a から b−1 まで
  • range(a, b, s): a から b まで s ずつ(b は含まれない)
print(list(range(5)))        # [0, 1, 2, 3, 4]
print(list(range(2, 6)))     # [2, 3, 4, 5]
print(list(range(1, 10, 2))) # [1, 3, 5, 7, 9]
Python

終了値が「含まれない」ことが重要です。範囲のズレ(±1のミス)を防ぐには、意図した上限が stop 未満かどうかを意識しましょう。

負のステップで逆順に数える

step を負数にすると、上から下へ逆順の列を作れます。開始値と終了値の関係(開始 > 終了)を満たすようにします。

print(list(range(5, 0, -1)))  # [5, 4, 3, 2, 1]
Python

step=0 はエラー、float は使えないため、必要なら整数でスケールするか他の手段を選びます。


メモリ効率と「必要なときに取り出す」性質(深掘り)

range() はリストのように全要素を一度に保持しません。必要なタイミングで値を計算して渡す“イテラブル”なので、大きな範囲でもメモリ消費が小さく済みます。確認用に値を一覧したいときだけ list(range(…)) に変換します。

big = range(1_000_000_000)  # 巨大でも作成は軽い
# 実際に見るなら
print(big.start, big.stop, big.step)  # 1 1000000000 1
Python

for ループとの組み合わせ(鉄板パターン)

回数ループとインデックス付き処理

指定回数の処理や、インデックスが必要なときに便利です。インデックスが不要なら enumerate の方が可読性が高い場合もあります。

for i in range(3):
    print(i)  # 0, 1, 2

fruits = ["apple", "banana", "orange"]
for i in range(len(fruits)):
    print(i, fruits[i])
# または:
for i, name in enumerate(fruits):
    print(i, name)
Python

複数列との併用

zip と組み合わせて「同じ長さの列を並行して」処理できます。

names = ["太郎", "花子"]
points = [92, 88]
for i in range(len(names)):
    print(names[i], points[i])
# または:
for name, point in zip(names, points):
    print(name, point)
Python

for と range の併用は、決まった回数の反復を簡潔に表現できるため、初心者から上級者まで広く使われます。


よくある落とし穴と安全策(重要ポイント)

終了値を「含まない」ことを忘れない

range(a, b) は b を含みません。たとえば 1〜10 を作りたいなら range(1, 11) にします。境界値テストを習慣化するとズレを防げます。

step は 0 にできない、float は扱えない

step=0 はエラーになります。小数刻みが必要な場合は整数にスケールする(例: 0.5刻みなら整数で *2 してから /2 で表示する)、または外部ライブラリ(例: NumPy)を検討します。

逆順は負のステップで

降順は range(start, stop, -1) のように負のステップを使います。start > stop を満たさないと空になります。


例題で身につける(現場の定番)

例題1:合計と平均(決まった回数の加算)

prices = [120, 340, 560]
total = 0
for i in range(len(prices)):
    total += prices[i]
avg = total / len(prices)
print(f"合計: {total} / 平均: {avg:.1f}")
Python

例題2:九九の一部(2引数の範囲)

for i in range(1, 4):      # 1,2,3
    for j in range(1, 4):  # 1,2,3
        print(f"{i}×{j}={i*j}")
Python

例題3:逆順カウントダウン(負のステップ)

for n in range(5, 0, -1):  # 5,4,3,2,1
    print(n)
print("発射!")
Python

例題4:フィルタ付き処理(偶数だけ)

for n in range(0, 10, 2):  # 0,2,4,6,8
    print(n)
Python

まとめ(押さえるべき重要ポイント)

range() は「半開区間」で整数列を作るイテラブルで、start・stop・step を指定できます。終了値は含まれず、step=0 は不可、float は扱えないため整数で設計するのが基本。for ループと組み合わせて、回数の指定、インデックス処理、逆順、間引きなどを簡潔に書けます。大きな範囲でもメモリ効率が良いので、一覧が必要なときだけ list(…) に変換する習慣を持つと安全です。

タイトルとURLをコピーしました