Pythonでは、「リストの中身を順番に表示する」「1〜10までの数字を出力する」など、繰り返し処理を簡単に書くことができます。そのとき使うのが「for文(フォーブン)
」です。
「for文を使いこなせば、コードの自動化や効率化が一気に進む!」
本記事では、Pythonにおけるfor文の基本構文、よくある使い方、注意点などを初心者向けにわかりやすく紹介します。
for文とは?Pythonにおける繰り返し処理の基本

基本構文
for 変数名 in 繰り返し対象:
実行したい処理
構文の説明:
- 変数名:繰り返しのたびに値が入る変数
- 繰り返し対象:リストや文字列など、順番に取り出せるもの
- 実行したい処理:繰り返すたびに実行されるコード
最初の例:リストの中身を1つずつ表示
fruits = ["apple", "banana", "orange"]
for fruit in fruits:
print(fruit)
実行結果:
apple
banana
orange
動作の流れ:
fruits
リストの最初の要素"apple"
が変数fruit
に入るprint(fruit)
で”apple”を表示- 次の要素
"banana"
が変数fruit
に入る print(fruit)
で”banana”を表示- 最後の要素
"orange"
まで同様に繰り返す
for文の利点
コードの簡潔性 同じ処理を何度も書く必要がない
可読性の向上 何をしているかが一目でわかる
保守性の向上 処理を変更するときは1箇所だけ修正すればOK
ポイント: for文を使えば、繰り返し処理を効率的に書けるようになります。
よく使う繰り返し対象(イテラブル)
リスト(配列)の繰り返し
# 数値のリスト
numbers = [1, 2, 3, 4, 5]
for num in numbers:
print(f"数値: {num}")
# 文字列のリスト
colors = ["red", "green", "blue"]
for color in colors:
print(f"色: {color}")
# 混合リスト
mixed = [1, "hello", 3.14, True]
for item in mixed:
print(f"要素: {item}, 型: {type(item)}")
文字列の文字1つずつ
word = "Python"
for char in word:
print(char)
実行結果:
P
y
t
h
o
n
タプルの繰り返し
coordinates = (10, 20, 30)
for coord in coordinates:
print(f"座標: {coord}")
集合(set)の繰り返し
unique_numbers = {1, 2, 3, 3, 4, 4, 5} # 重複は自動で除去
for num in unique_numbers:
print(num)
# 注意:集合は順序が保証されない
range関数を使った数値の繰り返し

基本的なrange関数
0から指定した数未満まで
for i in range(5):
print(i)
実行結果:
0
1
2
3
4
開始と終了を指定
for i in range(1, 6):
print(i)
実行結果:
1
2
3
4
5
ステップ(増分)を指定
# 偶数のみ表示
for i in range(2, 11, 2):
print(i)
実行結果:
2
4
6
8
10
range関数の応用例
逆順に数える
for i in range(10, 0, -1):
print(i)
print("発射!")
リストのインデックスを使った処理
fruits = ["apple", "banana", "orange"]
for i in range(len(fruits)):
print(f"インデックス {i}: {fruits[i]}")
九九表の作成
for i in range(1, 10):
for j in range(1, 10):
result = i * j
print(f"{i} × {j} = {result:2d}", end=" ")
print() # 改行
辞書(dictionary)をfor文で回す

キーのみを取得
person = {"name": "田中", "age": 25, "city": "東京"}
for key in person:
print(f"キー: {key}")
キーと値を同時に取得
person = {"name": "田中", "age": 25, "city": "東京"}
for key, value in person.items():
print(f"{key}: {value}")
実行結果:
name: 田中
age: 25
city: 東京
値のみを取得
person = {"name": "田中", "age": 25, "city": "東京"}
for value in person.values():
print(f"値: {value}")
辞書の実用例
# 成績管理
scores = {"数学": 85, "英語": 92, "国語": 78}
print("=== 成績表 ===")
total = 0
for subject, score in scores.items():
print(f"{subject}: {score}点")
total += score
average = total / len(scores)
print(f"平均点: {average:.1f}点")
ネスト(for文の入れ子)
基本的なネスト構造
# 2次元リストの処理
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for element in row:
print(element, end=" ")
print() # 行の終わりで改行
実行結果:
1 2 3
4 5 6
7 8 9
実用的なネスト例
ファイル名の一括生成
departments = ["営業", "開発", "総務"]
years = [2022, 2023, 2024]
for dept in departments:
for year in years:
filename = f"{dept}_{year}.xlsx"
print(f"作成予定ファイル: {filename}")
座標の組み合わせ生成
# チェス盤の座標
for row in range(1, 9):
for col in ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']:
coordinate = f"{col}{row}"
print(coordinate, end=" ")
print()
よくあるエラーと対処法
エラー1:コロン(:)の忘れ
# 間違った書き方
for i in range(5) # ← エラー!コロンが必要
print(i)
正しい書き方:
for i in range(5): # ← コロンを忘れずに
print(i)
エラー2:インデント(字下げ)の間違い
# 間違った書き方
for i in range(5):
print(i) # ← エラー!インデントが必要
正しい書き方:
for i in range(5):
print(i) # ← 半角スペース4つでインデント
エラー3:変数名の重複
# 注意が必要な例
i = 100
for i in range(5):
print(i)
print(i) # 4 が表示される(元の100は上書きされる)
より良い書き方:
counter = 100
for i in range(5):
print(i)
print(counter) # 100 が表示される
エラー4:リストを変更しながらループ
# 危険な例
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
numbers.remove(num) # ループ中のリスト変更は危険
安全な書き方:
numbers = [1, 2, 3, 4, 5]
numbers = [num for num in numbers if num % 2 != 0]
# または
new_numbers = []
for num in numbers:
if num % 2 != 0:
new_numbers.append(num)
応用テクニック

enumerate():インデックス付きループ
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
実行結果:
0: apple
1: banana
2: cherry
1から始まるインデックス
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits, start=1):
print(f"{index}. {fruit}")
zip():複数のリストを同時に処理
names = ["田中", "佐藤", "鈴木"]
ages = [25, 30, 35]
cities = ["東京", "大阪", "名古屋"]
for name, age, city in zip(names, ages, cities):
print(f"{name}さん({age}歳)は{city}在住")
実行結果:
田中さん(25歳)は東京在住
佐藤さん(30歳)は大阪在住
鈴木さん(35歳)は名古屋在住
reversed():逆順でループ
numbers = [1, 2, 3, 4, 5]
for num in reversed(numbers):
print(num)
実行結果:
5
4
3
2
1
sorted():ソート済みでループ
names = ["Charlie", "Alice", "Bob"]
for name in sorted(names):
print(name)
実行結果:
Alice
Bob
Charlie
実践的な活用例
ファイル処理
# ファイルの各行を処理
with open("data.txt", "r", encoding="utf-8") as file:
for line_number, line in enumerate(file, start=1):
print(f"行 {line_number}: {line.strip()}")
データ分析
# 売上データの分析
sales_data = [
{"product": "商品A", "price": 1000, "quantity": 5},
{"product": "商品B", "price": 1500, "quantity": 3},
{"product": "商品C", "price": 800, "quantity": 7}
]
total_revenue = 0
for item in sales_data:
revenue = item["price"] * item["quantity"]
total_revenue += revenue
print(f"{item['product']}: {revenue:,}円")
print(f"合計売上: {total_revenue:,}円")
Web スクレイピング
# URLのリストを順次処理(疑似コード)
urls = [
"https://example1.com",
"https://example2.com",
"https://example3.com"
]
for url in urls:
print(f"処理中: {url}")
# requests.get(url) などでデータ取得
# 取得したデータを処理
ゲーム開発
# RPGゲームの敵との戦闘
enemies = ["スライム", "ゴブリン", "ドラゴン"]
player_hp = 100
for enemy in enemies:
print(f"{enemy}があらわれた!")
# 戦闘処理
damage = 20 # 簡略化
player_hp -= damage
print(f"{enemy}を倒した!(残りHP: {player_hp})")
if player_hp <= 0:
print("ゲームオーバー")
break
パフォーマンスの考慮

効率的なループの書き方
# 良い例:必要な処理のみ
numbers = range(1000000)
total = 0
for num in numbers:
total += num
# さらに良い例:組み込み関数を活用
total = sum(range(1000000))
リスト内包表記での高速化
# 通常のfor文
squares = []
for x in range(10):
squares.append(x ** 2)
# リスト内包表記(より高速)
squares = [x ** 2 for x in range(10)]
よくある質問と答え
Q: for文とwhile文はどう使い分けますか?
A: 繰り返し回数が決まっている場合はfor文、条件が成立する間続ける場合はwhile文を使います。
Q: break文とcontinue文の違いは?
A: break文はループを完全に終了、continue文は現在の回のみスキップして次の回に進みます。
Q: ネストしたfor文のパフォーマンスは大丈夫ですか?
A: データ量が大きい場合は注意が必要です。計算量がO(n²)になるため、効率的なアルゴリズムを検討してください。
Q: for文の中で元のリストを変更しても大丈夫ですか?
A: 危険です。予期しない動作の原因になるため、新しいリストを作成することを推奨します。
練習問題
初級問題
- 1から10までの数字の合計を求めてください
total = 0
for i in range(1, 11):
total += i
print(f"合計: {total}")
- 文字列の各文字を改行して表示してください
word = "プログラミング"
for char in word:
print(char)
中級問題
- リスト内の偶数だけを表示してください
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in numbers:
if num % 2 == 0:
print(num)
- 辞書から特定の条件に合うデータを抽出してください
students = [
{"name": "田中", "score": 85},
{"name": "佐藤", "score": 92},
{"name": "鈴木", "score": 78}
]
for student in students:
if student["score"] >= 80:
print(f"{student['name']}さん: {student['score']}点(合格)")
まとめ:Pythonのfor文はシンプルなのに超強力!
重要ポイントまとめ:
機能 | 使い方例 | 用途 |
---|---|---|
リストの繰り返し | for item in list: | 配列の各要素を処理 |
数値の繰り返し | for i in range(n): | 指定回数の処理 |
辞書のループ | for key, val in dict.items(): | キーと値の組み合わせ処理 |
ネスト処理 | 2重ループ | 多次元データの処理 |
インデックス付き | enumerate() を使用 | 番号付きで処理 |
使い分けのコツ:
- 要素を順番に処理:基本のfor文
- 指定回数繰り返し:range()を使用
- 複数のデータを同時処理:zip()を活用
- インデックスも必要:enumerate()を活用
Pythonのfor文
は、書き方が非常にシンプルで、初心者にも扱いやすいのが特徴です。
慣れてくると、「データ処理」「ファイル操作」「条件付きループ」など、あらゆる場面で活躍します。
コメント