「Python にはなぜ foreach文 がないんだろう?」と思うことはありませんか?
特に、JavaScript や C# など Python 以外のプログラミング言語の経験者の方。
foreach文はfor文より簡単に繰り返し処理が記述できるので重宝しますよね。
この記事では、Python で foreach文 と同じ処理を実現する方法をご紹介します。
対象者は Python で for文 の基本が理解できている方を推奨しますが、良く分からない方でも理解できるように丁寧に解説します。
for文について、こちらの記事が参考になります。
イメージをつかんでもらえるように例題を載せていますので、初心者の方も安心してご覧下さい。
foreach文 とは?
foreach文を知らないという方に向けて、基本的な使い方を紹介しておきます。
foreach文は、プログラミングにおける繰り返し(ループ)制御構文の一つです。
可読性が高く、for文 と比べて簡潔に記述することが可能です。
配列や辞書からすべての要素を1回ずつ読み出すことができます。
使用できるプログラミング言語は C# 、PHP 、JavaScript など多くの言語が対応しています。
C# における基本的な記述例は下の通りです。
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文 が苦手な処理の一例を紹介します。
*こちらもPython の話ではないので聞き流してください
①要素のインデックスが必要な場合
foreach文 は要素を直接取得し、インデックスにアクセスするのが難しいため、インデックスが重要な場合には不向きです。
このような場合には 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文 はそれをサポートしていません。
この場合、LINQ の zip関数 などを使用したり、for文 を使って対処することがあります。
③要素の追加、削除、変更などの操作が必要な場合
foreach文 では、コレクション内の要素を直接変更することが難しいため、要素を変更する必要がある場合には適していません。
この場合も、for文 を使用することで要素の操作が可能となります。
④途中でループを終了する必要がある場合
foreach文 は通常、反復処理を完了するまで続けられます。
途中でループを終了する必要がある場合には、for文 の中で break
ステートメントを使用する必要があります。
foreach文 はシンプルな反復処理には非常に便利です。
しかし、上記のようなケースにはあまり向いていません。
Pythonでは foreach文 が使えない?
「使えない」というと語弊があります。
もう少し正しく表現すると「Python の for文 は何でもできるから要らない」ということになります。
Python で foreach文 と同じ処理をやってみよう
「絶対に foreach文 でなければできない処理」というものはありません
ここでは、同じ処理をfor文 で実現する方法をご紹介します。
for文 だけで実現する方法
上の foreach文 の例と同じ処理を、Python の for文 で記述すると以下の様になります。
my_list = [1, 2, 3, 4, 5]
for item in my_list:
print(item)
やはり Python は分かりやすいですね。
それ以上に for文 でこれほどシンプルに処理できるのは素晴らしいです。
もちろん、実行結果は以下の通り同じです。
1
2
3
4
5
関数と組み合わせることも可能
Python の素晴らしいところは「分かりやすい」だけではありません。
例えば、上の実行結果を「逆順にして出力する」ということも簡単にできます。
この場合、reversed() 関数を使うと実現できます。
my_list = [1, 2, 3, 4, 5]
for item in reversed(my_list):
print(item)
その他にも、昇順に並べ替えたい場合はsorted()関数があります。
my_list = [5, 2, 1, 4, 3]
for item in sorted(my_list):
print(item)
また、降順にしたい場合はsorted()関数の第二引数に「reverse=True」とすればOKです。
my_list = [5, 2, 1, 4, 3]
for item in sorted(my_list, reverse=True):
print(item)
やはり、Python は素晴らしいです。
まとめ
今回はPython で foreach文 の処理を実現する方法を解説しました。
Python で for文 を使ったリスト処理について、こちらの記事でも紹介しています。
今後も便利で面白い実装方法やPythonを中心としたプログラミングの情報をお届けします。
以下のメルマガにご登録頂くと、不定期に配信をお届けします。
ぜひ購読してください!
それでは、ステキなPythonライフを!
もっと詳しく知りたいという方は、こちらの書籍もおススメです。