for文

【Python】for文の基本的な使い方

【Python】for文の基本的な使い方

Pythonでfor文により繰り返し処理をする方法について解説します。

for文による繰り返し処理

Pythonで、繰り返し処理を行う場合にはfor文を使用します。繰り返し処理には、while文も使用できますが、while文については「while文の基本的な使い方」を参考にしてください。

Pythonのfor文は、リストや辞書などのイテラブルなオブジェクト(※)から要素を取り出して処理を行います。

この記事では、Pythonにおけるfor文により繰り返し処理をする方法の基本について紹介します。

Note ※

イテラブルなオブジェクトとは反復可能なオブジェクトでリスト(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に限らず、多くのプログラム言語における重要な制御構文です。しっかりと使い方を覚えて、使えるようにしましょう。