【初心者向け】Pythonのfor文とは?繰り返し処理を基礎から徹底解説!

python

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

動作の流れ:

  1. fruitsリストの最初の要素"apple"が変数fruitに入る
  2. print(fruit)で”apple”を表示
  3. 次の要素"banana"が変数fruitに入る
  4. print(fruit)で”banana”を表示
  5. 最後の要素"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. 1から10までの数字の合計を求めてください
total = 0
for i in range(1, 11):
    total += i
print(f"合計: {total}")
  1. 文字列の各文字を改行して表示してください
word = "プログラミング"
for char in word:
    print(char)

中級問題

  1. リスト内の偶数だけを表示してください
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in numbers:
    if num % 2 == 0:
        print(num)
  1. 辞書から特定の条件に合うデータを抽出してください
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文は、書き方が非常にシンプルで、初心者にも扱いやすいのが特徴です。
慣れてくると、「データ処理」「ファイル操作」「条件付きループ」など、あらゆる場面で活躍します。

コメント

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