ユーニックス総合研究所

  • home
  • archives
  • python-for

Pythonのfor文の書き方【繰り返し文、ループ文】

  • 作成日: 2021-04-30
  • 更新日: 2023-12-26
  • カテゴリ: Python

Pythonのfor文の使い方

プログラミング言語のPythonでは制御文の1つとしてfor文を使うことができます。
for文を使うと繰り返し処理が書けて大量の処理をさばくことが可能になります。

Pythonのfor文にはある程度決まった書き方があり、その書き方を覚えてしまえばあとは応用が利きます。
この記事ではPythonのfor文の基本的な使い方を紹介します。
具体的には↓を見ていきます。

  • 繰り返し文とは?
  • for文の構造
  • for-else
  • リスト・タプルをfor文で回す
  • リスト・タプルを逆順でfor文で回す
  • 辞書をfor文で回す
  • range()で指定範囲をカウントする
  • enumerate()で添え字と要素を取り出す
  • 自作オブジェクトをfor文で回す

繰り返し文とは?

プログラミングにおける繰り返し文、ループ文とはどういうものでしょうか?
繰り返し文とは一定の範囲で、決められた処理繰り返す文です。

繰り返し文はプログラミングにおいて大量の処理をさばきたい時に使われます。
そういう意味で繰り返し文はプログラミングにおいてメジャーな文と言っていいです。
for文はこの繰り返し文の1つです。

「一定の範囲」とは、たとえば0から100までの間を数えてカウントしたいとなったときに、0から100までの範囲を指定します。
そして決められた処理とは、たとえば「Hello, World!」を表示したいとなったら、for文の中にprint('Hello, World!')と書きます。
つまりこの場合、0から100までのあいだ、つまり100回文「Hello, World!」を表示するということになります。

Pythonにおけるfor文は、この一定の範囲をリストやタプルに置き換えることも出来ます。
リストやタプルの一定の範囲、つまりリストの要素数分だけfor文を回し、リストの要素を取り出すということが可能です。

for文の構造

Pythonのfor文の構造について解説します。
for文は↓のような構造を持っています。

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

または  

for 要素 in オブジェクト:  
    処理  
else:  
    終了時の処理  

elseが付いているfor文もありますが、基本的に良く使われるのは最初の方のfor文です。
Pythonのfor文は「for」というキーワードと「in」というキーワードを組み合わせて使います。
そしてそれらをコロン(:)で区切り、繰り返したい「処理」を書きます。

要素

for文における要素とはオブジェクトから取り出したものです。
たとえばオブジェクトがリストなら、要素はリスト内の要素になります。
range()なら整数の添え字です。

この要素はfor文を回すうえでオブジェクトから自動で取り出されます。
そのためこの要素を使って処理を書くというのが定石です。
たとえばリストの要素ならその要素をprint()で出力するとか。
あるいはrange()で生成した添え字なら、その添え字でリストにアクセスするとかが考えられます。

またfor文を回すだけで要素は使用しないということもあります。
その場合要素は_などで表現されることがあります。

オブジェクト

inの右隣に書かれるオブジェクトはfor文で回したいオブジェクトのことです。
たとえばfor文でリストを回し、その要素を取り出していろいろな処理をしたいとなったとき、回したいオブジェクトはリストになります。
このリストをinの右隣に書くことでfor文でそのリストから要素を取り出すことができます。

またオブジェクトにはリストの他にもタプルやrange(), enumerate()なども指定できます。
これは__iter__()が実装されているオブジェクトです。
つまり自作オブジェクトであっても__iter__()を実装すればfor文で回すことが出来るようになります。

for-else文

for文のお尻にはelseを付けることができます。

for 要素 in オブジェクト:  
    処理  
else:  
    終了時の処理  

else内の処理はfor文が最後までループされたときに実行されます。
for文の途中でbreakされた場合は実行されません。
そのためfor文が正常に終了したときに実行したい処理をここに書いておくなどして利用します。

for i in range(3):  
    print(i)  
else:  
    print('done')  

↑のコードを実行すると↓のような結果になります。

0  
1  
2  
done  

リスト・タプルをfor文で回す

Pythonのfor文ではリストやタプルなどを回すことができます。
リストやタプルをfor文のinの右側に書いて、そのオブジェクトを回して要素を取り出します。
リストの場合は↓のようになります。

lis = [1, 2, 3]  
for el in lis:  
    print(el)  

↑のコードを実行すると↓のような結果になります。

1  
2  
3  

リストの先頭から要素が取り出され、その要素がprint()で出力され↑のような結果になります。
タプルの場合もリストの時と同様に回すことができます。

tup = (1, 2, 3)  
for el in tup:  
    print(el)  

↑のコードを実行すると↓のような結果になります。

1  
2  
3  

リスト・タプルを逆順でfor文で回す

for文でリストやタプルを逆順で回すには↓のようにします。

lis = [1, 2, 3]  
for el in lis[::-1]:  
    print(el)  

tup = (1, 2, 3)  
for el in tup[::-1]:  
    print(el)  
3  
2  
1  
3  
2  
1  

リストやタプルに[::-1]でアクセスするとそのオブジェクトを逆順にすることができます。
これを利用してfor文と組み合わせて使うことでリストやタプルを逆順で走査することができます。

辞書をfor文で回す

辞書をそのままfor文で回すと、デフォルトでは辞書のキーが取り出されます。

d = {'a': 1, 'b': 2}  
for key in d:  
    print(key)  
a  
b  

明示的にキーを取り出したい場合はkeys()を使います。

d = {'a': 1, 'b': 2}  
for key in d.keys():  
    print(key)  
a  
b  

また値を取り出したい場合はvalues()を使います。

d = {'a': 1, 'b': 2}  
for val in d.values():  
    print(val)  
1  
2  

キーと値を同時に取り出したい場合はitems()を使います。

d = {'a': 1, 'b': 2}  
for key, val in d.items():  
    print(key, val)  
a 1  
b 2  

range()で指定範囲をカウントする

組み込みクラスのrange()を使うと指定範囲の数列を生成することができます。
これを利用して、for文で指定の数列の範囲を回すことが出来るようになります。
たとえば0から4より下まで回したい時は下のようにします。

for i in range(4):  
    print(i)  
0  
1  
2  
3  

range()の詳しい使い方については下の記事を参照してください。

enumerate()で添え字と要素を取り出す

リストを回す時に添え字も一緒に取り出したいとなった場合はenumerate()を使います。
これを使うとオブジェクトから添え字と要素を同時に取り出せます。

lis = [10, 20, 30]  
for i, el in enumerate(lis):  
    print(i, el)  
0 10  
1 20  
2 30  

自作オブジェクトをfor文で回す

自作のクラスに__iter__()を実装すると、そのオブジェクトをfor文で回すことが出来るようになります。

class LoopMe:  
    def __iter__(self):  
        return iter(range(3))  

for el in LoopMe():  
    print(el)  
0  
1  
2  

おわりに

今回はPythonのfor文について解説しました。
for文を使えるようになると色々な処理のバリエーションが増やせるかと思います。

🦝 < for文を覚えて大量処理しよう