Python range()関数をマスター:基礎から応用まで
Python range()関数をマスター:基礎から応用まで
Pythonのrange()は、開始、停止、オプションのステップに基づいて整数シーケンスを生成する組み込みジェネレータです。開始値を省略すると0がデフォルトで、停止値(排他的)に達するまで1ずつ増加します。例えばrange(5)は0, 1, 2, 3, 4を生成します。この関数はforループでの反復処理に不可欠です。
このチュートリアルで学べること:
range()の定義と構文- 歴史:
range()vsxrange() - start、stop、stepを使った
range()の使い方 - 増分と減分の範囲
- 浮動小数点の制限と代替手段
- リスト、配列、NumPyの
arange()との併用 - 応用パターン: 範囲の結合、偶数抽出、アルファベットシーケンス生成
構文
range(start, stop, step)
パラメータ
- start(オプション): シーケンスの最初の整数。省略時は0。
- stop(必須): 上限(排他的)。この値に達する前に停止。
- step(オプション): 連続する値の間隔。デフォルトは1。
戻り値
整数のイミュータブルなシーケンスのように振る舞うrangeオブジェクトを返します。リストに変換すると完全なシーケンスが表示されます。
Python range()関数と歴史
Python 3で導入されたrange()は、Python 2で使われていたxrange()に置き換わりました。主な違いは以下の通り:
| range() | xrange() |
|---|---|
| 数値のイミュータブルなシーケンスを返す | ジェネレータオブジェクトを返す |
| シーケンス長に比例したメモリを消費 | 最小メモリで遅延生成 |
| 小~中規模の範囲に適する | 大規模または無限シーケンスに適する |
| 巨大な範囲ではメモリ確保で低速 | 大規模範囲の反復で高速 |
range()の使い方
0から9までの数値を出力する基本例:
for i in range(10):
print(i, end=" ")
出力:
0 1 2 3 4 5 6 7 8 9
range()でのstartとstopの使用
開始値を指定するとシーケンスがシフト:
for i in range(3, 10):
print(i, end=" ")
出力:
3 4 5 6 7 8 9
start、stop、stepの使用
ステップを追加して数値間の間隔を制御:
for i in range(3, 10, 2):
print(i, end=" ")
出力:
3 5 7 9
正のステップで値を増分
デフォルトのステップは1ですが、任意の正の整数を指定可能:
for i in range(1, 30, 5):
print(i, end=" ")
出力:
1 6 11 16 21 26
逆順範囲: 負のステップで減分
負のステップで降順シーケンスを作成:
for i in range(15, 5, -1):
print(i, end=" ")
出力:
15 14 13 12 11 10 9 8 7 6
Python range()での浮動小数点数
組み込みrange()は整数のみ受け付けます。浮動小数点数を渡すとTypeErrorが発生:
for i in range(10.5):
print(i, end=" ")
出力:
Traceback (most recent call last): File "python_range.py", line 1, infor i in range(10.5): TypeError: 'float' object cannot be interpreted as an integer
Python range()とforループの併用
range()はlen()と組み合わせてリストのインデックスを反復するのによく使われます:
arr_list = ['MySQL', 'MongoDB', 'PostgreSQL', 'Firebase']
for i in range(len(arr_list)):
print(arr_list[i], end=" ")
出力:
MySQL MongoDB PostgreSQL Firebase
Python range()をリストとして使用
rangeをリストに変換は簡単:
print(list(range(10)))
出力:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Python range()での文字使用
range()は整数のみ扱えますが、文字をUnicodeコードポイントに変換してアルファベットシーケンスを生成可能:
def get_alphabets(startletter, stopletter, step):
for c in range(ord(startletter.lower()), ord(stopletter.lower()), step):
yield chr(c)
print(list(get_alphabets("a", "h", 1)))
出力:
['a', 'b', 'c', 'd', 'e', 'f', 'g']
範囲要素へのアクセス方法
反復、インデックス、リスト変換で値を取得:
反復
for i in range(6):
print(i)
出力:
0 1 2 3 4 5
インデックス
startvalue = range(5)[0]
print("最初の要素:", startvalue)
secondvalue = range(5)[1]
print("2番目の要素:", secondvalue)
lastvalue = range(5)[-1]
print("最後の要素:", lastvalue)
出力:
最初の要素: 0 2番目の要素: 1 最後の要素: 4
list()を使用
print(list(range(10)))
出力:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
例: range()で偶数を取得
18までの偶数を生成:
for i in range(2, 20, 2):
print(i, end=" ")
出力:
2 4 6 8 10 12 14 16 18
2つのrange()出力を結合
itertools.chainで2つのrangeオブジェクトを結合:
from itertools import chain
print("2つのrangeを1つに結合")
frange = chain(range(10), range(10, 20, 1))
for i in frange:
print(i, end=" ")
出力:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
NumPyでのrange()使用
NumPyのarange()はrange()を模倣しつつ浮動小数点ステップをサポート:
構文
arange(start, stop, step)
例
import numpy as np
for i in np.arange(10):
print(i, end=" ")
出力:
0 1 2 3 4 5 6 7 8 9
NumPyでの浮動小数点範囲
for i in np.arange(0.5, 1.5, 0.2):
print(i, end=" ")
出力:
0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998
浮動小数点演算は2進数のため、長い小数展開が表示されることがあります。必要に応じて丸めてください。
まとめ
- range()はstart、stop、stepで定義される整数シーケンスを生成
- Python 3で導入;xrange()はPython 2での前身
- 正のステップで昇順、負のステップで降順
- 浮動小数点数は非対応;浮動小数点にはNumPy arange()を使用
- 反復、インデックス、
list()変換で要素アクセス itertools.chainで範囲結合、アルファベットなどカスタムシーケンス生成可能- 大規模数値範囲ではジェネレータの振る舞いを考慮してメモリ効率化
Python
- Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
- Python ラムダ関数: 無名関数の実践ガイド
- Pythonジェネレータ:効率的イテレーションと高度なユースケース
- Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
- Pythonラムダ関数をマスターする:実例とベストプラクティス
- Python abs()関数:数値と複素数の絶対値を計算
- Python round()関数を実例で徹底解説
- Python range()関数をマスター:基礎から応用まで
- Python map()関数をマスター:構文、例、ベストプラクティス
- Python enumerate()をマスター:リスト、タプル、文字列、辞書でインデックス付きループ
- Python list.count() 完全ガイド:実践例付きで徹底解説