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文を覚えて大量処理しよう