Pythonのforループ|基本から便利なテクニックまで網羅的に解説!

2025年4月24日木曜日

Python

Pythonにはいくつかループ処理がありますが、その中でも特に「決まった回数」や「データの集まり(リストとか)の要素の数だけ」繰り返すのが得意なのがforループです。

これを使えば、面倒な繰り返し作業もPythonさんが自動でサクサクこなしてくれるようになりますよ。

この記事では、Pythonのforループの基本的な書き方から、range関数やbreak/continue文の使い方、さらには少し応用的なテクニックまで、豊富なコード例と共に一歩ずつ丁寧に解説します。

Pythonのforループの基本的な書き方

forループの書き方を見ていきましょう!
基本の形はこうです。

for 変数 in イテラブルオブジェクト:
    実行したい処理 (インデントする!)

ちょっとカタカナが多くて「?」となるかもしれませんが、大丈夫。
一つずつ説明しますね。

  • for
    「これからforループを始めますよー」という合図です。
  • 変数
    イテラブルオブジェクトから取り出した要素が、一時的に入る箱のようなもの。ループが一周するたびに、中身が次の要素に入れ替わります。好きな名前をつけられますが、何が入るかわかりやすい名前がおすすめです(例: `item`, `name`, `num` など)。
  • in
    「この中から取り出すよ」という意味のキーワードです。
  • イテラブルオブジェクト
    要素を一つずつ順番に取り出せるもの」のことです。難しく考えず、まずはリスト、文字列、後で出てくる`range()`などをイメージしてください。
  • : (コロン)
    「ここからループ内の処理が始まりますよ」の合図。絶対に忘れないでください!
  • 実行したい処理
    ループの中で繰り返したい処理を書きます。大事なのは、行の先頭にスペースを入れて「インデント(字下げ)」すること! Pythonではインデントで処理の範囲を示すので、これがズレるとエラーになります。

言葉だけだとピンと来ないと思うので、次から具体的な例を見ていきましょう!

リストを使ったPythonのforループ具体例

まずは一番よく使う、リストを使った例です。
果物の名前が入ったリスト `fruits` から、一つずつ名前を取り出して表示してみましょう。

fruits = ["apple", "banana", "cherry"]

print("好きな果物は?")
for fruit in fruits:
    print(fruit)

print("どれも美味しい!")

表示結果

好きな果物は?
apple
banana
cherry
どれも美味しい!

どうでしょう?

リスト `fruits` の中身が、`fruit` という変数に順番に入って、`print(fruit)` で表示されているのがわかりますか?

`for`ループが終わると、最後の `print("どれも美味しい!")` が実行されます。ループで処理したい部分だけインデントするのがポイントです。

range関数を使った数値の繰り返し

次は、リストみたいにあらかじめデータがないけど、「決まった回数」だけ繰り返したい、というときに便利な `range()` 関数です。

これは連続した数値を作り出してくれる関数です。

print("0から4まで表示します")
for i in range(5):  # range(5) は 0, 1, 2, 3, 4 という数値の列を作る
    print(i)

表示結果

0から4まで表示します
0
1
2
3
4

`range(5)` と書くと、0から始まり、5の手前(つまり4)までの数値の列を作ってくれます。これが結構大事なポイント!指定した数字そのものは含まれないんですね。

変数 `i` に 0, 1, 2, 3, 4 が順番に入って表示されています。

`range()` は、始まりの数字や、いくつ飛ばしにするかも指定できます。

  • `range(開始値, 終了値)` → 開始値から終了値の手前まで
  • `range(開始値, 終了値, ステップ)` → 開始値から終了値の手前まで、ステップ数飛ばしで

2から6まで表示

print("2から6まで表示します")
for num in range(2, 7): # 2から7の手前(6)まで
    print(num)

表示結果

2から6まで表示します
2
3
4
5
6

0から10まで2つ飛ばしで表示

print("0から10まで2つ飛ばしで表示")
for x in range(0, 11, 2): # 0から11の手前(10)まで、2つ飛ばし
    print(x)

表示結果

0から10まで2つ飛ばしで表示
0
2
4
6
8
10

`range()`、なかなか便利でしょ?決まった回数だけ何かしたい時にめちゃくちゃ役立ちます

文字列を1文字ずつ処理するforループ

実は、文字列もforループで1文字ずつ取り出すことができるんです。
やってみましょう。

word = "Hello"

for char in word:
    print(char)

表示結果

H
e
l
l
o

簡単ですね!文字列 `word` の中の文字が、`char` という変数に1文字ずつ順番に入って表示されています。文字列もリストと同じように扱えるのは覚えておくと便利です。

タプルや辞書でのforループ活用法

リストや文字列の他にも、タプル辞書もforループで扱えます。

タプルはリストとほぼ同じ感覚で使えます。要素の変更ができない版リスト、みたいなイメージです。

my_tuple = (10, 20, 30)

for item in my_tuple:
    print(item)

表示結果

10
20
30

辞書の場合は、少しパターンがあります。

1. キーだけを取り出す (これが基本の動作)

scores = {"math": 80, "english": 75, "science": 90}

print("--- キー ---")
for key in scores: # デフォルトだとキーが取り出される
    print(key)

表示結果

--- キー ---
math
english
science

2. 値だけを取り出す (`.values()`を使う)

scores = {"math": 80, "english": 75, "science": 90}

print("--- 値 ---")
for value in scores.values():
    print(value)

表示結果

--- 値 ---
80
75
90

3. キーと値のペアを取り出す (`.items()`を使う)
これが一番よく使うかもしれません。

scores = {"math": 80, "english": 75, "science": 90}

print("--- キーと値 ---")
for key, value in scores.items(): # items() を使うのがポイント!
    print(f"{key}: {value}") # f-string で見やすく表示

表示結果

--- キーと値 ---
math: 80
english: 75
science: 90

辞書の場合は、何を取り出したいかに合わせて `.values()` や `.items()` を使い分けるのがコツです。

forループでよく使う制御構文 - breakとcontinue

forループは基本的に最後まで実行されますが、途中で動きを変えたい時もありますよね。
そんな時に使うのが `break` と `continue` です。

  • break:ループ処理を完全に中断して、ループから抜け出す。
  • continue今回の処理だけをスキップして、次の回のループ処理に進む。

例えるなら、`break`は「もう十分!ここで終わり!」、`continue`は「今回はパス!次いってみよう!」みたいな感じです。

それぞれ見ていきましょう。

【break文】ループを途中で抜ける方法

`break` は、特定の条件になったらループをもうやめたい時に使います。
例えば、リストの中から特定の値を探していて、見つかったらそれ以上探す必要がない、みたいな場面です。numbers = [1, 5, 8, 12, 15, 20]

print("10より大きい最初の数を見つけたら終了します。")
for num in numbers:
    print(f"チェック中: {num}")
    if num > 10:
        print(f"見つけました! {num} です。")
        break # ここでループを抜ける!
print("ループ終了")

の表示結果

10より大きい最初の数を見つけたら終了します。
チェック中: 1
チェック中: 5
チェック中: 8
チェック中: 12
見つけました! 12 です。
ループ終了

12が見つかった時点で `if num > 10:` が `True` になり、`break` が実行されました。
そのため、15と20はチェックされずにループが終了しているのがわかりますね。これが `break` の効果です。

【continue文】特定の処理をスキップする方法

`continue` は、特定の条件の時だけ、その回の残りの処理を飛ばして、次のループに進みたい時に使います。

例えば、特定の要素だけ処理対象外にしたい、みたいな場面です。

foods = ["apple", "banana", "orange", "grape"]

print("バナナ以外を表示します。")
for food in foods:
    if food == "banana":
        continue # バナナの時はここで処理をスキップして、次のループへ!
    print(f"これは {food} です。") # continueが実行されるとここは実行されない

print("処理完了")

表示結果

バナナ以外を表示します。
これは apple です。
これは orange です。
これは grape です。
処理完了

`food` が "banana" の時に `if food == "banana":` が `True` になり、`continue` が実行されました。

そのため、"banana" の回の `print(f"これは {food} です。")` は実行されず、次の "orange" のループに進んでいます。特定の条件だけ処理を飛ばせるのが `continue` の便利なところです。

Pythonのforループでありがちなエラーと対処法

forループは便利ですが、慣れないうちはエラーが出たり、思った通りに動かなかったりすることも。

よくあるパターンと対処法を知っておきましょう!

インデント忘れ・ズレ (`IndentationError`)

これはPython全般で本当によくあるミスです。
forループの中の処理は、必ず半角スペース4つ(またはタブ1つ)でインデントしてください。
インデントがなかったり、行によってズレていたりすると `IndentationError` が出ます。
エディタのインデント補助機能を使うと防ぎやすいですよ。

# ダメな例 (インデントがない)
# for item in my_list:
# print(item) ← エラー!

# 正しい例
my_list = [1, 2]
for item in my_list:
    print(item) # ← OK!

コロン忘れ (`SyntaxError`)

`for 変数 in イテラブルオブジェクト` の行末のコロン `:` を忘れると `SyntaxError: invalid syntax` のようなエラーが出ます。

単純なミスですが、意外と見落としがち。エラーが出たらまず確認しましょう。

`range()` の範囲指定ミス

`range(5)` が 0 から 4 まで、`range(1, 5)` が 1 から 4 まで、というように、終了値の手前までというのを忘れがちです。

思った回数ループしないな、と思ったら `range()` の指定を確認してみましょう。

ループ内でリストなどを変更する際の注意

これは少し応用的な話ですが、forループで処理している対象のリストなどを、ループの内部で追加したり削除したりすると、予期せぬ動きをすることがあります

例えば、要素を削除していくと、ループが途中で終わってしまったり、インデックスがずれてエラーになったり。

もしループ内でリストなどを変更したい場合は、元のリストのコピーに対してループを回すなどの工夫が必要になることがあります。初心者のうちは、まずは「ループ対象はループ内で変更しない」と覚えておくと安全です。

エラーが出ても焦らず、メッセージをよく読んで、どこがおかしいか探ってみてくださいね!

もっと効率的に!Pythonのforループ関連テクニック

基本的なforループは理解できましたか?

ここからは、forループをさらに便利に、そしてコードをより「Pythonっぽく」書くためのテクニックを2つ紹介します!

enumerate関数でインデックスも取得

リストなどをループ処理していると、「今、何番目の要素を処理しているのか」を知りたい時があります。

そんな時に便利なのが `enumerate()` 関数です。

これを使うと、ループの中で要素の値と同時に、その要素のインデックス番号(順番の番号、0から始まる)も取得できます

members = ["Alice", "Bob", "Charlie"]

print("出席番号と名前:")
for index, name in enumerate(members): # enumerate() でリストを囲む
    print(f"{index}: {name}")

表示結果

出席番号と名前:
0: Alice
1: Bob
2: Charlie

`enumerate(members)` とすることで、ループごとに `index` に番号が、`name` に名前が入ってきます。

わざわざ自分でカウンター変数を用意しなくても、スマートにインデックスが扱えるので、覚えておくとコードがスッキリしますよ!

zip関数で複数のリストを同時に処理

次に紹介するのは `zip()` 関数です。

これは、複数のリスト(やタプルなど)の要素を、まるでジッパーで閉じるように、ペアにして同時に取り出せる便利な関数です。

例えば、名前のリストと、対応する年齢のリストがあって、それらを一緒に表示したい、みたいな時に役立ちます。

names = ["Sato", "Suzuki", "Takahashi"]
ages = [25, 30, 28]

for name, age in zip(names, ages): # zip() で複数のリストをまとめる
    print(f"{name}さんは {age}歳です。")

表示結果

Satoさんは 25歳です。
Suzukiさんは 30歳です。
Takahashiさんは 28歳です。

`zip(names, ages)` とすることで、1回目のループでは `name` に "Sato"、`age` に 25 が、2回目のループでは `name` に "Suzuki"、`age` に 30 が…というように、対応する要素がセットで取り出せます。

注意点として、`zip()` はリストの長さが違う場合、短い方のリストが終わった時点でループも終了します

例えば、`names` が3つ、`ages` が2つしかなかったら、2回ループした時点で終わりになります。

`enumerate` や `zip` を使いこなせると、より高度なループ処理も簡潔に書けるようになりますよ!

Pythonのforループ学習まとめ

Pythonのforループについて、基本からちょっとした応用テクニックまで見てきました。
ここで、学んだことを簡単にまとめておきましょう。

  • forループは、リストや文字列、range()などで決まった回数や要素数だけ処理を繰り返すのに便利。
  • 基本構文は `for 変数 in イテラブルオブジェクト:` で、処理はインデントする。
  • `range(終了値)` や `range(開始値, 終了値, ステップ)` で数値の繰り返しができる。
  • `break` でループを中断、`continue` で処理をスキップできる。
  • `enumerate()` でインデックスと要素を同時に取得できる。
  • `zip()` で複数のリストなどを同時に処理できる。
  • インデントミスやコロン忘れに注意!

forループは、プログラミングの基本的な考え方である「繰り返し」を学ぶ上で、とても良い練習になります。

まずは、この記事のコードを実際に自分で打ち込んで動かしてみてください。
そして、身の回りにある「繰り返しの作業」をforループで自動化できないか考えてみるのも面白いですよ!

例えば、好きな数字のリストを作って合計値を計算してみるとか、簡単なゲームのスコア計算をしてみるとか。

【関連記事】 「Pythonとは?」に答える最初の一歩

このブログを検索

  • ()

自己紹介

自分の写真
リモートワークでエンジニア兼Webディレクターとして活動しています。プログラミングやAIなど、日々の業務や学びの中で得た知識や気づきをわかりやすく発信し、これからITスキルを身につけたい人にも役立つ情報をお届けします。 note → https://note.com/yurufuri X → https://x.com/mnao111

QooQ