Pythonでfor
文により繰り返し処理をする方法について解説します。
Contents
for
文による繰り返し処理
Pythonで、繰り返し処理を行う場合にはfor
文を使用します。繰り返し処理には、while
文も使用できますが、while
文については「while文の基本的な使い方」を参考にしてください。
Pythonのfor
文は、リストや辞書などのイテラブルなオブジェクト(※)から要素を取り出して処理を行います。
この記事では、Pythonにおけるfor
文により繰り返し処理をする方法の基本について紹介します。
イテラブルなオブジェクトとは反復可能なオブジェクトでリスト(list
)、タプル(tuple
)、辞書(dict
)等が代表的なものになります。また、__iter__()
メソッドかもしくは__getitem__()
メソッドを持つ任意のクラスのオブジェクトもfor
文の繰り返しで使用することができます。
また、イテレータは__iter__()
が返却するオブジェクトで__next__()
メソッドで要素を一つずつ取り出すことが可能です。イテレータについてはこちらでまとめていますので参考にしてください。
for
文の基本的な使い方
for
文では、リスト、辞書、集合等のイテラブルなオブジェクトから要素を取り出して処理します。C言語等のfor
文ではfor(i =0; i < 10; i++)
のように初期化値、条件、変化式のように指定して繰り返し処理しますが、Pythonのfor
文では少し異なっています。
Pythonにおけるfor
文の構文は以下になります。
for
文for 変数 in イテラブルなオブジェクト: 処理コード...
以下の使用例を見ながらfor
文の使い方を確認しましょう。
# for文の基本的な使い方 data = [10, 20, 30, 40, 50] for dt in data: print(f"dt: {dt}")
【実行結果】 dt: 10 dt: 20 dt: 30 dt: 40 dt: 50
上記例では、data
という数値リストを用意し、data
から要素を一つずつ取り出して値を表示しています。data
の部分はリストだけではなく辞書、集合等のイテラブルなオブジェクトであれば同様に使うことができます。
break
文によるループの終了
for
文の繰り返し処理では、一定の条件を満たした場合にfor
文を抜けて次の処理に移りたい場合があります。このような場合にfor
文を途中で抜けるにはbreak
文を使います。
# break文でループを抜ける data = [10, 20, 30, 40, 50] for dt in data: print(f"start: {dt}") if dt > 30: # 30より大きい値の場合はループを抜ける print("break") break print("end")
【実行結果】 start: 10 end start: 20 end start: 30 end start: 40 break
上記例では、for
文で順に取り出した数値が30
より大きい数値の場合にbreak
文で処理を抜けます。
実行結果を見ると数値が40
のループに入った際にdt > 30
の条件に一致するため"break"
という文字が表示されてループが終わっていることが分かります。この時、for
文を抜けているため、後続の"end"
という文字列は表示されていません。
continue
文による次のループへのジャンプ
上記で紹介したbreak
文は一定条件を満たす場合にfor
文を終了する方法でした。一定の条件を満たした場合に、以降の処理をスキップして次のループへ進みたい場合はcontinue
文を使います。
# continue文で次のループへ data = [10, 20, 30, 40, 50] for dt in data: print(f"start: {dt}") if dt < 30: # 30より小さい値の場合は、次のループへ continue print("end")
【実行結果】 start: 10 start: 20 start: 30 end start: 40 end start: 50 end
上記例では、数値が30
より小さい値の場合は、処理をスキップして次のループへ進みます。
実行結果を見ると10
, 20
の場合は"end"
が表示されておらず、print
がスキップされていることが分かります。しかし、break
文のようにfor
文を抜けているわけではなく後続する30
, 40
, 50
についてはprint
処理が実行されていることが分かります。
else
による正常終了の確認
for
文の処理が正常に終了しているかを確認したい場合には、else
で確認することができます。正常終了と言っているのは「break
文が実行されていない」ということです。
以下の例で確認してみましょう。
# elseによるbreakのチェック(breakが呼び出されるケース) data = [10, 20, 30, 40, 50] for dt in data: print(f"start: {dt}") if dt > 30: # 30より大きい値の場合はループを抜ける break print("end") else: # breakが呼び出されなければ実行 print("正常終了") print("\n==========") # elseによるbreakのチェック(breakが呼び出されないケース) data = [10, 20, 30] for dt in data: print(f"start: {dt}") if dt > 30: # 30より大きい値の場合はループを抜ける break print("end") else: # breakが呼び出されなければ実行 print("正常終了")
【実行結果】 start: 10 end start: 20 end start: 30 end start: 40 ========== start: 10 end start: 20 end start: 30 end 正常終了
上記例は、前半部分は「break
文が呼び出されて処理を抜けるケース」、後半部分は「break
が呼び出されないケース」となっています。
前半の処理では、break
文が呼び出されているのでelse
の処理に入っていないことが分かります。一方で、後半の処理ではbreak
文が呼び出されないのでelse
の処理に入り、"正常終了"
というprint
が実行されています。
このようにbreak
文の実行有無を確認するのにelse
は便利です。
for
文でよく使う方法 ~range
, enumerate
, zip
~
rangeを用いたfor文
0, 1, 2, 3, 4, …
のような数値シーケンスを使ってfor
文を実行したい場合にはrange
が便利です。range
を使用したfor
文の使用方法については「rangeを用いたfor文の使い方」を参考にしてください。
enumerateを用いたfor文
for
文を実行時に、繰り返しの中で取り出している要素が何番目の要素なのかを判断するにはenumerate
が便利です。enumerate
を使用したfor
文の使用方法については「enumerateを用いたfor文の使い方」を参考にしてください。
zipを用いたfor文
for
文を実行時に、例えば2つのリストを同時に繰り返し処理するといったように複数オブジェクトを同時に処理するにはzip
が便利です。zip
を使用したfor
文の使用方法については「zipを用いたfor文の使い方」を参考にしてください。
まとめ
Pythonでfor
文により繰り返し処理をする方法について解説しました。
Pythonのfor
文は、リストや辞書などのイテラブルなオブジェクトから要素を取り出して処理を行います。この記事では、for
文の基本的な使い方を紹介しました。
for
文は、Pythonに限らず、多くのプログラム言語における重要な制御構文です。しっかりと使い方を覚えて、使えるようにしましょう。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。