Python入門

Pythonでforeach文を使う方法|for文との違いと実践サンプルコード

Python で foreach文 の処理を実現する

「Pythonにはなぜforeach文がないんだろう?」と疑問に思ったことはありませんか?

特に、JavaScriptやC#など他の言語を経験された方なら、foreach文の便利さをよくご存知のことと思います。Pythonでもfor文・map関数・リスト内包表記を使えば、foreach文とまったく同じ処理を実現できます。

この記事では、Pythonでforeachのようなループ処理を書く方法を、初心者の方にも分かりやすいサンプルコード付きで丁寧に解説します。

Pythonのfor文の基礎から確認したい方は、こちらの記事も参考にしてみてください。
Python for文の使い方を徹底解説

foreach文とは?基本的な仕組みをおさらい

まず、foreach文を知らない方のために基本を整理しておきます。

foreach文とは、プログラミングにおける繰り返し(ループ)制御構文の一つです。配列やリストなどのコレクションから要素を1つずつ取り出して処理でき、for文よりも可読性が高く簡潔に記述できるのが特徴です。

C#・PHP・JavaScriptなど多くの言語で利用できます。

C#でのforeach文の記述例

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

        foreach (int number in numbers)
        {
            Console.WriteLine(number);
        }
    }
}

実行結果:

1
2
3
4
5

同じ処理をfor文で書くと以下のようになります。

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

        for (int i = 0; i < numbers.Count; i++)
        {
            Console.WriteLine(numbers[i]);
        }
    }
}

このように、リストから要素を取り出す処理はfor文よりforeach文の方がシンプルに書けますね。

foreachが苦手な処理

foreach文にも不向きな処理があります。代表的なものを確認しておきましょう。

① 要素のインデックスが必要な場合

foreach文は要素を直接取得する構文のため、インデックス番号へのアクセスが難しいです。インデックスが必要な処理にはfor文を使う方が適しています。

// C# でインデックスが必要な場合はfor文を使う
List<int> numbers = new List<int> { 10, 20, 30, 40, 50 };
for (int i = 0; i < numbers.Count; i++)
{
    Console.WriteLine($"Index: {i}, Value: {numbers[i]}");
}

② ループ中にコレクションを変更する場合

foreach文でループ中にリストの要素を追加・削除しようとすると、多くの言語でエラーになります。このような処理には通常のfor文か、コレクションのコピーを使う方法が安全です。

PythonにforeachがないのはなぜかPython自体がforeachの設計になっているから

実はPythonのfor文はそれ自体がforeachの設計になっています。

多くの言語では「インデックスでループするfor文」と「要素を直接取り出すforeach文」が別々に存在しますが、Pythonのfor文は最初から「イテラブル(繰り返し可能なオブジェクト)から要素を直接取り出す」仕様になっています。

つまり、Pythonのfor文=foreach文と考えてしまって問題ありません。

Pythonでforeachと同じ処理を実現する4つの方法

ここからが本題です。Pythonでforeachと同等の処理を書く代表的な方法を4つ紹介します。

方法① for文で要素を直接取り出す(最もシンプル)

Pythonのfor文は、リストや辞書などのイテラブルから要素を直接取り出せます。これがforeachと同等の基本的な書き方です。

# リストの要素を1つずつ取り出す(foreachと同じ動作)
numbers = [1, 2, 3, 4, 5]

for number in numbers:
    print(number)

実行結果:

1
2
3
4
5

C#のforeach文と見比べてみてください。ほぼ同じ感覚で書けることが分かります。

方法② enumerate()でインデックス付きforeachを実現する

foreachが苦手とする「インデックスも同時に取得したい」という場面では、Pythonのenumerate()関数が便利です。

# インデックスと要素を同時に取得する
fruits = ["apple", "banana", "cherry"]

for index, fruit in enumerate(fruits):
    print(f"Index: {index}, Value: {fruit}")

実行結果:

Index: 0, Value: apple
Index: 1, Value: banana
Index: 2, Value: cherry

enumerate()を使えば、foreachの弱点だった「インデックスへのアクセス」も簡単に解決できます。

方法③ map()関数で要素に処理を適用する

map()関数を使うと、リストの各要素に関数を適用する処理をforeachライクに書けます。特に全要素に同じ変換処理を行いたいときに便利です。

# 各要素を2倍にする処理をmap()で実現
numbers = [1, 2, 3, 4, 5]

doubled = list(map(lambda x: x * 2, numbers))
print(doubled)

実行結果:

[2, 4, 6, 8, 10]

map()はfor文よりも処理速度が速い場合があり、パフォーマンスが求められる場面でも活躍します。

方法④ リスト内包表記でforeachをよりPythonicに書く

Pythonらしい(Pythonic)書き方として、リスト内包表記があります。foreach的なループ処理を1行で書けるため、コードがすっきりします。

# リスト内包表記で各要素を2倍にする
numbers = [1, 2, 3, 4, 5]

doubled = [x * 2 for x in numbers]
print(doubled)

実行結果:

[2, 4, 6, 8, 10]

条件フィルタリングも同時にできます。

# 偶数だけを2倍にして取り出す
numbers = [1, 2, 3, 4, 5, 6]

result = [x * 2 for x in numbers if x % 2 == 0]
print(result)

実行結果:

[4, 8, 12]

辞書(dict)に対してforeachと同じ処理をする方法

リストだけでなく、辞書(dict)に対してもforeachのようなループ処理が可能です。

キーだけをループする

person = {"name": "Alice", "age": 30, "city": "Tokyo"}

for key in person:
    print(key)

実行結果:

name
age
city

キーと値を同時にループする(items()を使う)

person = {"name": "Alice", "age": 30, "city": "Tokyo"}

for key, value in person.items():
    print(f"{key}: {value}")

実行結果:

name: Alice
age: 30
city: Tokyo

items()を使えば、キーと値をセットで取り出せるので非常に便利です。

4つの方法の比較まとめ

ここまで紹介した4つの方法を表にまとめます。

方法特徴向いている場面
for文(基本)最もシンプルで読みやすい基本的なループ処理全般
enumerate()インデックスと要素を同時取得インデックスが必要な処理
map()関数全要素に関数を適用、高速変換処理・パフォーマンス重視
リスト内包表記1行で書けるPythonic変換+フィルタリングを簡潔に

まとめ:Pythonのfor文はforeachそのもの

この記事では、Pythonでforeachのようなループ処理を実現する方法を4つ紹介しました。

  • Pythonのfor文はそれ自体がforeachの設計になっている
  • インデックスも必要ならenumerate()を使う
  • 変換処理にはmap()関数が便利
  • Pythonicに書くならリスト内包表記がおすすめ

他の言語のforeach文と同等以上のことがPythonでも十分できますので、ぜひ活用してみてください。

Pythonのfor文についてさらに詳しく学びたい方は、こちらの記事もあわせてどうぞ。
Python for文の使い方を徹底解説

📚 関連記事

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る
徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る
実践Claude Code入門―現場で活用するためのAIコーディングの思考法

もしも

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

AIコーディングの現場活用法を学ぶ一冊

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です