for文

繰り返し処理をする際、Pythonではfor文が使用できます。このページではfor文について解説します。

for文の基本

Pythonのfor文は以下のように記述します。

for文
for ループ内変数 in イテラブルオブジェクト:
    ループ内処理

イテラブルオブジェクトというのは、listのようなシーケンスや辞書型のような複数の要素からなり、反復処理が可能なオブジェクトのことを指します。変数の型で既にループに関する話題に触れましたが、それらに加え、for-else文、break句について説明します。

[参考] range型

まずは基本のfor文について解説します。

listのfor文

listの要素の先頭から順番に表示する場合、以下のように記述します。

datas = ['a', 'b', 'c']

for v in datas:
    print(v) # listの各値が表示される

rangeのfor文

C言語やJavaのループカウンタを利用したループのように、初期値、限界、増分を指定します。

for v in range(1, 5, 2):
    print(v) # 1から2飛ばしで5未満まで出力されます。この場合、1、3が出力されます。

※ 2020/06/20 修正 上コードのコメントに誤りがありました。ご連絡くださった方、ありがとうございます。
(誤:この場合、3、5が出力されます。正:この場合、1、3が出力されます。)

dictionaryのfor文

keyのループ

辞書型の場合、keyでループすることができます。

dic = {'key1': 110, 'key2': 270, 'key3': 350}

for key in dic:
    print(key, dic[key])

valueのループ

値でループしたい場合はvaluesメソッドを利用します。

dic = {'key1': 110, 'key2': 270, 'key3': 350}
for value in dic.values():
    print(value) # 値が出力される

keyとvalueのループ

key、valueの両方をループで取得したい場合は、items()メソッドを利用します。

dic = {'key1': 110, 'key2': 270, 'key3': 350}
for key, value in dic.items():
    print(key, value) # keyと値が出力される

ループインデックスを取得する場合

何番目の要素だけは処理をしない、等の処理を入れたい場合はループインデックスを利用します。
組込みのenumerate関数を利用することで取得することができます。

リストの場合

l = ['a', 'b', 'c']
 
for i, value in enumerate(l):
    print(i, value) # ループインデックスとリストの値が出力
 
for i, (key, value) in enumerate(dic.items()):
    print(i, key, value) # ループインデックスとkeyと値が出力

辞書の場合

dic = {'key1': 110, 'key2': 270, 'key3': 350}
 
for i, value in enumerate(dic):
    print(i, value) # ループインデックスと値が出力
 
for i, (key, value) in enumerate(dic.items()):
    print(i, key, value) # ループインデックスとkeyと値が出力

break

ループを途中で抜ける場合、breakを使用します。サンプルで確認してみましょう。

data_list = [1, 2, 3] # 空のリスト

for data in data_list:
    print(data)
    if data > 1:
        break

2まで出力された後、breakが実行され処理が終了します。

for-else

Pythonのfor文はelseと併用することができます。elseブロックに記述した処理は、以下の動作となります。

  • forループ処理回数によらず実行される
  • breakした場合は実行されない

サンプルで動作を確認してみましょう。

data_list = [] # 空のリスト

for data in data_list:
    print(data)
else:
    print('ループ処理が終わりました') # ここが出力される。

ループで回すリストが空なので、forブロック内の処理は行われませんが、elseブロック内の処理は呼びだされます。また、breakと組み合わせて使用する場合が多いです。例えば、数値のリストで負の数の要素をループで見つけ、なければその旨を表示する場合、以下のように記述します。

l = [0, 3, 1, 10]
for x in l:
    if x < 0:
        print("負の数を検知しました")
        break
else:
    print("負の数は見つかりませんでした")

breakしない場合は最後のメッセージが表示されますが、breakすると最後のメッセージは表示されません。