Python range関数の使い方|数値の範囲を作る基本
Python初心者向けにrange関数の使い方を解説。基本的な数値範囲の作成からステップ指定、実践的な活用方法まで具体例とともに学べます。
Python range関数の使い方|数値の範囲を作る基本
みなさん、Pythonで「1から10まで繰り返したい」と思ったことはありませんか?
「偶数だけで処理したい」 「逆順で数えたい」 「効率的にループを書きたい」
こんな場面に遭遇したことがある方は多いはずです。 でも大丈夫です!
そんな時に便利なのがrange関数です。 この記事では、range関数の基本的な使い方から実践的な活用方法まで、初心者向けに詳しく解説します。
効率的な数値範囲の作成をマスターして、ループ処理を自在に操ってみましょう!
range関数って何だろう?
まず、range関数の基本的な概念を理解しましょう。 この関数を使いこなすことで、プログラムがぐっと書きやすくなります。
range関数の基本概念
range関数は、指定した範囲の数値を順番に生成する組み込み関数です。 リストを直接作るのではなく、数値を「必要な時に生成」する効率的な仕組みなんです。
# range関数の基本例numbers = range(5)print(numbers) # range(0, 5)print(type(numbers)) # <class 'range'>
# リストに変換して内容を確認print(list(numbers)) # [0, 1, 2, 3, 4]
このコードでは、range(5)
で0から4までの数値を生成しています。
注目すべきは、range
オブジェクト自体は数値を直接保持していないことです。
for文での基本的な使い方
# for文での使用例print("range(5)を使ったループ:")for i in range(5): print(f"数値: {i}")
# 実行結果:# 数値: 0# 数値: 1# 数値: 2# 数値: 3# 数値: 4
for文と組み合わせることで、指定回数の繰り返し処理が簡単に書けます。
range関数の特徴
range関数の重要な特徴を理解しましょう。
# 特徴1: メモリ効率が良いlarge_range = range(1000000)print(f"range(1000000): {large_range}")
# 特徴2: 必要な時に値を生成(遅延評価)def demonstrate_lazy_evaluation(): print("range関数は必要な時に値を生成します") numbers = range(3) print("range(3)を作成しました(まだ値は生成されていません)") print("for文で使用する際に値が生成されます:") for num in numbers: print(f" 生成された値: {num}")
demonstrate_lazy_evaluation()
このように、range関数は大きな範囲でもメモリを効率的に使用します。
インデックスアクセスも可能
# インデックスアクセスnumbers = range(5)print(f"range(5)の最初の値: {numbers[0]}") # 0print(f"range(5)の最後の値: {numbers[-1]}") # 4print(f"range(5)の長さ: {len(numbers)}") # 5
range関数は、メモリ効率と処理速度を両立した優れた仕組みです。
range関数の基本的な使い方
range関数には、引数の数によって3つの使い方があります。 それぞれ詳しく見ていきましょう。
1つの引数での使用
最もシンプルな使い方は、終了値のみを指定する方法です。
# range(stop) - 0から stop-1 までdef basic_range_examples(): print("=== 基本的なrange関数の使用例 ===") # range(5): 0, 1, 2, 3, 4 print("range(5):") for i in range(5): print(f" {i}") # range(0): 空の範囲 print("range(0):") for i in range(0): print(f" {i}") # 何も出力されない # range(1): 0のみ print("range(1):") for i in range(1): print(f" {i}") # 0
basic_range_examples()
1つの引数では、0から指定した数値の手前まで生成されることに注意しましょう。
リストの処理例
# 実用的な例:リストのインデックスdef process_list_with_range(): fruits = ["りんご", "みかん", "バナナ", "ぶどう"] print("=== リストの処理例 ===") print("インデックスと値を同時に表示:") for i in range(len(fruits)): print(f" {i}: {fruits[i]}")
process_list_with_range()
リストの要素数をlen()
で取得して、インデックスでアクセスする方法です。
繰り返し回数の制御
# 繰り返し処理の例def repeat_operations(): print("=== 繰り返し処理の例 ===") # 3回の処理 for i in range(3): print(f"処理{i+1}回目を実行中...") # カウントダウン print("カウントダウン:") for i in range(5): remaining = 5 - i print(f"あと{remaining}秒...")
repeat_operations()
このように、指定回数の処理を簡単に実装できます。
2つの引数での使用
開始値と終了値を指定する方法です。
# range(start, stop) - start から stop-1 までdef range_with_start_stop(): print("=== 開始値と終了値を指定したrange ===") # range(2, 7): 2, 3, 4, 5, 6 print("range(2, 7):") for i in range(2, 7): print(f" {i}") # range(10, 15): 10, 11, 12, 13, 14 print("range(10, 15):") numbers = list(range(10, 15)) print(f" {numbers}")
range_with_start_stop()
開始値と終了値を指定することで、より柔軟な範囲設定が可能になります。
実用例:成績評価
# 実用例:特定の範囲での処理def grade_evaluation(): print("=== 成績評価の例 ===") # 60点から100点までの範囲で評価 for score in range(60, 101, 10): # 10点刻み if score >= 90: grade = "A" elif score >= 80: grade = "B" elif score >= 70: grade = "C" else: grade = "D" print(f" {score}点: {grade}評価")
grade_evaluation()
このように、特定の範囲での処理が簡単に書けます。
ステップ指定:3つの引数での使用
開始値、終了値、ステップ(増分)を指定する方法です。 これにより、より複雑なパターンの数値列が生成できます。
基本的なステップ指定
# range(start, stop, step) - start から stop-1 まで step 刻みdef range_with_step(): print("=== ステップを指定したrange ===") # 偶数のみ生成 print("偶数のみ (range(0, 11, 2)):") even_numbers = list(range(0, 11, 2)) print(f" {even_numbers}") # 奇数のみ生成 print("奇数のみ (range(1, 11, 2)):") odd_numbers = list(range(1, 11, 2)) print(f" {odd_numbers}")
range_with_step()
ステップに2を指定することで、偶数や奇数だけを取得できます。
様々なステップパターン
# 5の倍数と大きなステップdef various_step_patterns(): print("=== 様々なステップパターン ===") # 5の倍数 print("5の倍数 (range(0, 26, 5)):") multiples_of_5 = list(range(0, 26, 5)) print(f" {multiples_of_5}") # 大きなステップ print("10刻み (range(100, 201, 10)):") hundreds = list(range(100, 201, 10)) print(f" {hundreds}")
various_step_patterns()
ステップを変えることで、様々なパターンの数値列を作成できます。
逆順(負のステップ)
# 逆順のrange(負のステップ)def reverse_range(): print("=== 逆順のrange(負のステップ) ===") # 10から1まで逆順 print("カウントダウン (range(10, 0, -1)):") countdown = list(range(10, 0, -1)) print(f" {countdown}") # 偶数を逆順 print("偶数を逆順 (range(10, -1, -2)):") reverse_even = list(range(10, -1, -2)) print(f" {reverse_even}")
reverse_range()
負のステップを使うことで、逆順の数値列を生成できます。
データサンプリングの例
# 実用例:データのサンプリングdef data_sampling(): print("=== データサンプリングの例 ===") # 100個のデータから10個をサンプリング total_data = 100 sample_count = 10 step = total_data // sample_count sample_indices = list(range(0, total_data, step)) print(f"サンプリングインデックス: {sample_indices}") # 時系列データの間引き print("時系列データの間引き(3時間おき):") hours_in_day = 24 interval = 3 for hour in range(0, hours_in_day, interval): print(f" {hour:02d}:00")
data_sampling()
ステップ指定により、データの間引きやサンプリングが効率的に行えます。
実践的なrange活用例
range関数を使った実践的なプログラム例を見てみましょう。 実際の開発でよく使われるパターンです。
ループ処理での活用
# 基本的なループパターンdef common_loop_patterns(): print("=== 一般的なループパターン ===") # パターン1: 回数指定のループ print("1. 指定回数の繰り返し:") for i in range(3): print(f" 処理{i+1}回目") # パターン2: インデックス付きループ print("2. インデックス付きリスト処理:") items = ["A", "B", "C", "D"] for i in range(len(items)): print(f" {i}: {items[i]}") # パターン3: 逆順処理 print("3. 逆順でのリスト処理:") for i in range(len(items) - 1, -1, -1): print(f" {i}: {items[i]}")
common_loop_patterns()
これらは、日常的によく使用するループパターンです。
ネストしたループでの活用
# ネストしたループの例def nested_loops(): print("=== ネストしたループの例 ===") # 九九の表 print("九九の表:") for i in range(1, 10): for j in range(1, 10): result = i * j print(f"{result:3}", end=" ") print() # 行の終わりで改行 # 座標系の処理 print("座標系の処理 (3x3グリッド):") for y in range(3): for x in range(3): print(f"({x}, {y})", end=" ") print() # 行の終わりで改行
nested_loops()
二重ループにより、表やグリッドの処理が簡単に書けます。
データ構造の生成
# リスト内包表記での活用def list_comprehension_examples(): print("=== リスト内包表記での活用 ===") # 平方数のリスト squares = [i**2 for i in range(1, 11)] print(f"平方数: {squares}") # 偶数のリスト evens = [i for i in range(0, 21) if i % 2 == 0] print(f"偶数: {evens}") # 条件付きリスト生成 grades = [85, 92, 78, 96, 88, 73, 91] passing_indices = [i for i in range(len(grades)) if grades[i] >= 80] print(f"合格者のインデックス: {passing_indices}")
list_comprehension_examples()
リスト内包表記とrange関数を組み合わせることで、効率的にデータを生成できます。
辞書の生成
# 辞書の生成例def dictionary_generation(): print("=== 辞書の生成例 ===") # 数値とその平方の辞書 square_dict = {i: i**2 for i in range(1, 6)} print(f"平方数辞書: {square_dict}") # アルファベットとASCII値の辞書 ascii_dict = {chr(i): i for i in range(ord('A'), ord('A') + 5)} print(f"ASCII辞書: {ascii_dict}")
dictionary_generation()
辞書の生成でも、range関数は非常に便利です。
2次元リストの生成
# 2次元リスト(行列)の生成def matrix_generation(): print("=== 2次元リスト(行列)の生成 ===") # 3x3のゼロ行列 rows, cols = 3, 3 zero_matrix = [[0 for j in range(cols)] for i in range(rows)] print("3x3ゼロ行列:") for row in zero_matrix: print(f" {row}") # 単位行列 identity_matrix = [[1 if i == j else 0 for j in range(3)] for i in range(3)] print("3x3単位行列:") for row in identity_matrix: print(f" {row}")
matrix_generation()
2次元リストや行列の生成も、range関数で簡単に行えます。
まとめ:range関数をマスターしよう
Python range関数の重要なポイントをまとめます。
基本的な使い方
今回学んだ内容を整理すると以下の通りです。
range(stop)
: 0からstop-1までrange(start, stop)
: startからstop-1までrange(start, stop, step)
: startからstop-1まで step刻み
range関数の特徴
range関数の重要な特徴を覚えておきましょう。
- メモリ効率が良い:大きな範囲でも少ないメモリで動作
- 遅延評価:必要な時に値を生成
- 高速処理:リスト作成より高速
- 柔軟性:ステップ指定で様々なパターンに対応
実践的な活用場面
range関数は以下のような場面で活用できます。
- for文での繰り返し処理
- リスト・辞書の生成
- インデックスアクセス
- データサンプリング
- ネストしたループ処理
- 条件付きデータ生成
学習のポイント
range関数を使いこなすためのポイントです。
- 基本パターンを覚える:1つ、2つ、3つの引数での使い方
- 実際に試す:様々なパターンでコードを書いてみる
- 組み合わせる:リスト内包表記や辞書生成と組み合わせる
- 効率を意識する:メモリ効率の良さを活用する
次のステップ
range関数をマスターしたら、以下の内容も学んでみてください。
- enumerate関数:インデックスと値を同時に取得
- zip関数:複数のリストを同時にループ
- itertools モジュール:より高度な反復処理
- ジェネレータ:カスタムの遅延評価
range関数は、Pythonプログラミングにおいて最も頻繁に使用される重要な組み込み関数の一つです。 基本的な使い方から応用まで理解することで、効率的で読みやすいプログラムが作成できるようになります。
ぜひ、様々なパターンでrange関数を活用して、プログラミングスキルを向上させてくださいね!