ユーニックス総合研究所

  • home
  • archives
  • python-foreach

Pythonでforeach文と同じことをやる【for文】

  • 作成日: 2021-01-20
  • 更新日: 2023-12-24
  • カテゴリ: Python

Pythonでforeach文

Python以外のプログラミング言語にはforeach文というfor文を拡張した文があることがあります。
Pythonでもforeach文は使えるのでしょうか?

結論から言うとPythonにはforeach文はありませんが、for文を使うことで代用することが可能です。

この記事ではPythonとforeach文のようなfor文について解説します。
具体的には↓を見ていきます。

  • foreach文とは?
  • Pythonによるforeach(for-in)
  • for-inでいろいろなオブジェクトを回す

foreach文とは?

いわゆる一般で言うforeach文とはどういうものかといいますと、添え字が省略されているfor文のことです。
配列やリストなどから添え字を使わずに要素のみを抜き出すときに使います。
foreach文は配列やリストなどのオブジェクトの要素を先頭から走査していきたい時などに使われます。

添え字が省略されているので、普通のfor文に比べてforeach文は簡潔に書くことが出来ます。
そのためコードの保守性が上がり、コードが読みやすくなるという特徴を持っています。

逆に添え字を使った処理を書きたい場合は、foreach文は添え字を省略するので不向きと言えます。
基本的に自由度では「普通のfor文」のほうが高いですが、簡潔に書けるのは「foreach文」のほうです。

最近の現代的な言語ではこのforeach文は備わっていることが多いです。
C言語などの昔の言語でもマクロの機能を使って疑似的にforeach文を実現したりということが、玄人の間では行われているようです。
そういう意味でforeach文は非常にプログラマーなどに需要がある文と言えます。

foreach文を使うとコーディング量を減らすことが出来るので、大規模な開発ではあると便利です。
添え字を使うことがないのに、いちいち添え字を書かないといけないというのも労力ですからね。

Pythonによるforeach(for-in)

Pythonにはforeach文はありませんが、for文とinキーワードを使うことでそれと同じことを書くことが出来ます。
Pythonによるforeach文は↓のように書きます。

for 要素 in オブジェクト:  
    処理  

↑のようにfor文にinキーワードを組み合わせます。
走査したいオブジェクトをinキーワードの後に指定します。
このオブジェクトはたとえばリストやタプルなど、イテレーション可能なオブジェクトです。

inキーワードの後のオブジェクトはループで回り、先頭の要素から順に「要素」に渡されていきます。
たとえば↓のようなリストがあったとして、

[1, 2, 3]  

これを先頭から回すので要素には順に「1」、「2」、「3」とリスト内の要素が渡されていきます。

Pythonによるfor-in文

それでは実際のコードを紹介します。

lis = [1, 2, 3]  

for el in lis:  
    print(el)  

↑のコードはlisという変数に[1, 2, 3]というリストを代入しています。
そしてそのlisという変数をfor-in文で回しています。
lisから取り出した要素elprint()で1つずつ出力しています。
↑のコードの出力は↓のようになります。

1  
2  
3  

Pythonではイテレーション可能なオブジェクトであれば↑のようにfor-inで回すことが可能です。

for-inでいろいろなオブジェクトを回す

for-inで回せるオブジェクトはリストだけではありません。
他にもいろいろなオブジェクトを回すことが出来ます。

タプルを回す

↓のようにタプルも回せます。

lis = (1, 2, 3)  

for el in lis:  
    print(el)  

↑のコードの出力は↓のようになります。

1  
2  
3  

集合を回す

また↓のように集合(set)も回すことが可能です。

s = {1, 2, 3}  

for el in s:  
    print(el)  

↑のコードの出力は↓のようになります。

1  
2  
3  

辞書を回す

辞書(dict)を回す場合は辞書のメソッドとあわせて使います。
よく使われるのはitems(), keys(), values()です。

items()はキーと値をタプルで取り出します。

d = {'a': 1, 'b': 2}  

for el in d.items():  
    print(el)  

↑のコードの出力は↓のようになります。

('a', 1)  
('b', 2)  

keys()はキーの値のみを取り出す時に使われます。

d = {'a': 1, 'b': 2}  

for el in d.keys():  
    print(el)  

↑のコードの出力は↓のようになります。

a  
b  

values()は値のみを取り出すのに使われます。

d = {'a': 1, 'b': 2}  

for el in d.values():  
    print(el)  
1  
2  

また、これらのメソッドを使わずに単純に辞書をinに渡した場合は、キーが取り出されます。

d = {'a': 1, 'b': 2}  

for el in d:  
    print(el)  

↑のコードの出力結果は↓のようになります。

a  
b  

自作クラスをfor-inで回す

自作のクラスをfor-inで回したい場合は、クラスのメソッドの__iter__()を定義します。
↓の例ではMyListというクラスのメソッド__iter__()内でジェネレーターを生成しています。

class MyList:  
    def __iter__(self):  
        yield 1  
        yield 2  
        yield 3  


lis = MyList()  

for el in lis:  
    print(el)  

↑のコードの出力結果は↓のようになります。

1  
2  
3  

↑のようにfor-inはオブジェクトの参照時に__iter__を参照するので、↑のように__iter__()を定義することでオブジェクトをfor-inで回せるようになります。

おわりに

今回はPythonとforeach文について見て見ました。
Pythonにforeach文はありませんが、for-inを使うことでそれと同じ動作を実現することが可能です。