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
から取り出した要素el
はprint()
で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
を使うことでそれと同じ動作を実現することが可能です。