Pythonで繰り返し処理を書くとき、必ずと言っていいほど登場するのが range()
関数。
でも、「0〜10まで繰り返す」だけで使っていませんか?
実は range()
には、意外と知られていない便利テクニックがたくさんあります。
この記事では、基本から応用まで29個の活用法を一挙にご紹介します。
- ✅ range()の基本構文をおさらい
- 🔥【初心者〜中級者】今すぐ使えるrangeテク15選
- 1. 数値を繰り返す基本のforループ
- 2. 負の値で逆順ループ
- 3. 偶数だけループしたい
- 4. 奇数だけループしたい
- 5. rangeとlenの組み合わせでリスト処理
- 6. リストのインデックスを取得したいならenumerateがベスト
- 7. 複数のループをネストする(九九の例)
- 8. リストを一定間隔でスライス
- 9. rangeとzipを合わせて2つのリストを並列処理
- 10. 特定の回数だけ関数を実行
- 11. for文を一行で書く(内包表記)
- 12. range()と条件分岐の組み合わせ
- 13. rangeオブジェクトはメモリ効率がいい
- 14. リスト変換も可能
- 15. range()を逆順にしたいときはreversed
- 💡【あまり知られていない】range活用アイデア14選
- 16. rangeのステップに負数を使うと逆順にできる
- 17. rangeとdictでID付き辞書を作成
- 18. rangeはfor以外にも使える(map、filter等)
- 19. グリッド生成(2次元配列の処理)
- 20. rangeにfloatは使えない → np.arangeなどを使う
- 21. rangeとtime.sleepで簡易タイマー
- 22. rangeを使って乱数の分布を取る(ヒストグラム作成用の区切り)
- 23. rangeとbreak/continueを併用して条件制御
- 24. 大量ループの高速化:rangeではなくxrange(Python2)→ Python3ではrangeでOK
- 25. Python3.10以降、match-caseと組み合わせると便利
- 26. rangeをpandasと組み合わせる
- 27. 非常に大きな範囲(10億回)でもイテレートできる(ジェネレータ特性)
- 28. rangeで日付を処理(ただしdatetimeと組み合わせ必須)
- 29. rangeとitertools.productで組み合わせの全列挙
- ✅ まとめ:range()はループだけじゃもったいない!
- 🎁おまけ:range() vs numpy.arange の比較表
✅ range()の基本構文をおさらい
書き方 | 意味 | 例 |
---|---|---|
range(stop) | 0からstopの手前まで | range(5) → 0~4 |
range(start, stop) | startからstopの手前まで | range(3, 7) → 3~6 |
range(start, stop, step) | step刻みで繰り返し | range(2, 10, 2) → 2, 4, 6, 8 |
🔥【初心者〜中級者】今すぐ使えるrangeテク15選
1. 数値を繰り返す基本のforループ
for i in range(5):
print(i)
# 0〜4 を出力
2. 負の値で逆順ループ
for i in range(10, 0, -1):
print(i)
# 10〜1 を逆順で出力
3. 偶数だけループしたい
for i in range(0, 11, 2):
print(i)
4. 奇数だけループしたい
for i in range(1, 11, 2):
print(i)
5. rangeとlenの組み合わせでリスト処理
names = ['Alice', 'Bob', 'Charlie']
for i in range(len(names)):
print(i, names[i])
6. リストのインデックスを取得したいならenumerateがベスト
for i, name in enumerate(names):
print(i, name)
7. 複数のループをネストする(九九の例)
for i in range(1, 10):
for j in range(1, 10):
print(f"{i}×{j}={i*j}")
8. リストを一定間隔でスライス
lst = list(range(20))
for i in range(0, len(lst), 5):
print(lst[i:i+5])
9. rangeとzipを合わせて2つのリストを並列処理
a = [1, 2, 3]
b = ['a', 'b', 'c']
for i in range(len(a)):
print(a[i], b[i])
10. 特定の回数だけ関数を実行
for _ in range(3):
print("Hello!")
※ _
を使うのは「使わない変数」を明示するPythonの慣習。
11. for文を一行で書く(内包表記)
squared = [i**2 for i in range(10)]
12. range()と条件分岐の組み合わせ
for i in range(20):
if i % 3 == 0:
print(i)
13. rangeオブジェクトはメモリ効率がいい
r = range(1_000_000_000) # 1GBでも余裕
14. リスト変換も可能
list(range(5)) # → [0, 1, 2, 3, 4]
15. range()を逆順にしたいときはreversed
for i in reversed(range(5)):
print(i)
💡【あまり知られていない】range活用アイデア14選
16. rangeのステップに負数を使うと逆順にできる
(応用:後ろから数えるロジックに)
17. rangeとdictでID付き辞書を作成
users = {i: f"user{i}" for i in range(1, 6)}
18. rangeはfor以外にも使える(map、filter等)
19. グリッド生成(2次元配列の処理)
grid = [[(i, j) for j in range(3)] for i in range(3)]
20. rangeにfloatは使えない → np.arangeなどを使う
21. rangeとtime.sleepで簡易タイマー
import time
for i in range(5, 0, -1):
print(i)
time.sleep(1)
22. rangeを使って乱数の分布を取る(ヒストグラム作成用の区切り)
23. rangeとbreak/continueを併用して条件制御
for i in range(10):
if i == 5:
break
24. 大量ループの高速化:rangeではなくxrange(Python2)→ Python3ではrangeでOK
25. Python3.10以降、match-caseと組み合わせると便利
for i in range(5):
match i:
case 0: print("zero")
case 1: print("one")
26. rangeをpandasと組み合わせる
import pandas as pd
df = pd.DataFrame({"id": range(1, 6)})
27. 非常に大きな範囲(10億回)でもイテレートできる(ジェネレータ特性)
28. rangeで日付を処理(ただしdatetimeと組み合わせ必須)
29. rangeとitertools.productで組み合わせの全列挙
from itertools import product
for i, j in product(range(3), range(3)):
print(i, j)
✅ まとめ:range()はループだけじゃもったいない!
range()
はただの「数値をカウントする」関数ではありません。
発想を変えれば、データ構造の生成・繰り返し処理・組み合わせの生成など幅広く使える万能ツールです。
以下のように分類して、使いこなしましょう:
カテゴリ | テク例 |
---|---|
基本 | 1〜10, 偶数、奇数 |
応用 | ネスト、enumerate、内包表記 |
実務向け | pandas連携、辞書生成、grid生成 |
実験・研究向け | ヒストグラム、product、match-case |
🧠補足:range()でよくあるエラー
エラー例 | 原因 | 解決策 |
---|---|---|
TypeError: 'float' object cannot be interpreted as an integer | rangeはintのみ | int() で変換 or numpy.arange 使う |
range() arg 3 must not be zero | ステップに0を指定 | step≠0 にする |
🎁おまけ:range() vs numpy.arange の比較表
機能 | range() | np.arange |
---|---|---|
整数対応 | ◎ | ◎ |
浮動小数点対応 | × | ◎ |
メモリ効率 | ◎ | △ |
リスト変換 | 可能 | 可能 |
コメント