Python

【Python】for文の使い方【ループ処理】

この記事では、Pythonのfor文の使い方を解説します。for文を使うことで「繰り返し(ループ)処理」することができます。

Pythonのfor文は任意のシーケンス型(リストや文字列)を用いて反復します。

【Python】シーケンス型とは?【シーケンス型の使い方】この記事では、Pythonのシーケンス(sequence)型について解説します。 シーケンス型とは文字列やリストのような複数の要素...

それでは、for文の使い方を見ていきましょう!

for文の使い方

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

for 変数名 in シーケンス:
    何かしらの処理

シーケンス型の要素が1つずつ順番に変数に代入されて反復が行われます。次の要素が取り出せなくなった場合にループが終了します。

要素は「シーケンス中に要素が現れる順番」で変数に代入されます。

l = [1, 2, 3]

for i in l:
    print(i)

実行結果

1
2
3

上記コードは、リストの要素を1つずつ出力するだけのfor文です。

任意の回数だけループ:range関数

range関数を使うことで特定の回数だけループ処理することができます。

for i in range(3):
    print(i)

実行結果

0
1
2

0~2が出力されました。
stopに指定した値(ここでは3)は出力されないので注意してください。

初期値の変更

range関数のstartを指定することで初期値を変更することができます。

# range(start, stop)
for i in range(5, 8):
    print(i)

実行結果

5
6
7
【Python】range関数の使い方【数列の生成】この記事では、Pythonのrange関数の使い方について解説します。 range関数を使うことで任意の範囲の連続した数列を生成す...

処理をスキップ:continue

for文のループをスキップするには「continue」を使います。あくまでcontinueが実行されたときの処理のみスキップするので、それ以降もループは継続して処理されます。

l = [1, 2, 3]

for i in l:
    if i == 2:
        continue
    print(i)

実行結果

1
3

上記コードでは「i」が「2」のときに処理がスキップされます。continueによって処理がスキップされたので2は出力されませんでした。

処理を中断:break

for文のループを中断するには「break」を使います。breakが実行されたらfor文を途中で終了させることができます。

for v in ['a', 'b', 'end', 'c']:
    if v == 'end':
        break
    print(v)

実行結果

a
b

上記コードでは「end」が処理される際にbreakが実行され、ループが中断されます。breakが実行されるとfor文が終了するので以降のループは処理されません。

for文が正常終了した際の処理:else

for文のオプションとして「else」が用意されています。elseはfor文が正常終了した際に処理されます。

l = [1, 2, 3]

for i in l:
    print(i)
else:
    print('正常終了しました!')

実行結果

1
2
3
正常終了しました!

breakによってfor文が中断された場合はelseは処理されないので注意です。

l = [1, 2, 3]

for i in l:
    print(i)
    break
else:
    print('正常終了しました!')

実行結果

1

continueによって処理をスキップした場合はelseは問題なく処理されます。

任意の範囲のループ:スライス

特定の範囲の要素のみでループしたい場合は「スライス」を使うことで実装できます。

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]

for i in l[4:7]:
    print(i)

実行結果

5
6
7

上記コードはstartとstopを指定して特定の範囲の要素のみを取り出しました。

【Python】スライスの使い方この記事では、Pythonのスライスの使い方を解説します。 スライスを使うことでリストなどのシーケンス型のオブジェクトに格納されて...

多重ループ

for文中にfor文を記述することで多重ループさせることができます。以下はfor文を2つ重ねた「二重ループ」です。

for i in range(3):
    for j in range(3):
        print(f'i: {i}, j: {j}')

実行結果

i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
i: 1, j: 0
i: 1, j: 1
i: 1, j: 2
i: 2, j: 0
i: 2, j: 1
i: 2, j: 2
for文はいくつでも重ねることが可能ですが、重ねるごとに可読性が下がるので基本的には「三重ループ」までしか使いません

多次元配列の展開

多次元配列は多重ループを使うことで展開することができます。

l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for i in l:
    for j in i:
        print(j)
    print()

実行結果

1
2
3

4
5
6

7
8
9

以下のようにアンパックすることでも展開できます。

point = [[1, 2], [3, 4], [5, 6]]

for x, y in point:
    print(x, y)

実行結果

1 2
3 4
5 6

多重ループのbreak

多重ループをbreakで中断しようとしても、内側のfor文しか中断することができず、ループ処理が継続してしまいます。

for i in range(3):
    for j in range(3):
        print(i, j)
        if i == 1 and j == 1:
            print('break 実行')
            break

実行結果

0 0
0 1
0 2
1 0
1 1
break 実行
2 0
2 1
2 2

このような場合、どのようにすればループを中断できるのでしょうか?
「フラグを使う方法」「elseを使う方法」があるので順番に見ていきましょう!

フラグを使う方法

以下のようにbool値を使うことで多重ループを中断することができます。

flag = False

for i in range(3):
    for j in range(3):
        print(i, j)
        if i == 1 and j == 1:
            print('break 実行')
            flag = True
            break
    if flag:
        break

実行結果

0 0
0 1
0 2
1 0
1 1
break 実行

内側のbreakが処理された時に「flag変数」に「True」を格納することで外側のbreakも処理されます。

elseを使う方法

「else」はbreakで中断した場合は処理されません。その性質を利用して内側のfor文が正常終了した際には「else」によってcontinueが処理されて外側のbreakが実行されないようにしています。

内側のfor文がbreakによって中断された場合は、elseによってcontinueが処理されないので外側のbreakが実行される仕組みになっています。

for i in range(3):
    for j in range(3):
        print(i, j)
        if i == 1 and j == 1:
            print('break 実行')
            break
    else:
        print('continue 実行')
        continue
    print('外側のbreak 実行')
    break

実行結果

0 0
0 1
0 2
continue 実行
1 0
1 1
break 実行
外側のbreak 実行

forを使った無限ループ

itertools.count()関数を使うことで無限に値をカウントするイテレータを作成できます。そのイテレータを使うことでfor文で無限ループすることができます。

import itertools

for i in itertools.count():
    print(i)

実行結果

0
1
2
・
・
・
【Python】無限ループさせるいくつかの方法この記事では、Pythonで無限ループさせる方法を紹介します。 無限ループと言えばwhile文を思い浮かべるかもしれませんが、実は...

要素とインデックスを同時に取得する:enumrate関数

enumerate関数を使うことで要素とインデックスを同時に取得できます。

values = ['aaa', 'bbb', 'ccc']

for i, value in enumerate(values):
    print(i, value)

実行結果

0 aaa
1 bbb
2 ccc

開始値の変更

enumerate関数の第2引数に整数を指定することで開始値を変更することができます。
以下のコードでは開始値を1にして実行しています。

values = ['aaa', 'bbb', 'ccc']

for i, value in enumerate(values, 1):
    print(i, value)

実行結果

1 aaa
2 bbb
3 ccc

複数のシーケンスの要素を取得:zip関数

zip関数を使うことで1つのfor文で複数のシーケンスを処理できます。

nums = [1, 2, 3]
values = ['aaa', 'bbb', 'ccc']

for num, value in zip(nums, values):
    print(num, value)

実行結果

1 aaa
2 bbb
3 ccc

2つ以上の場合

2つ以上のシーケンスも同時に処理できます。

nums = [1, 2, 3]
values = ['aaa', 'bbb', 'ccc']
vals = [4, 5, 6]

for num, value, val in zip(nums, values, vals):
    print(num, value, val)

実行結果

1 aaa 4
2 bbb 5
3 ccc 6

要素数が異なる場合

要素数が異なる場合は要素数の少ない方に合わせて実行されます。

nums = [1, 2, 3]
values = ['aaa', 'bbb']

for num, value in zip(nums, values):
    print(num, value)

実行結果

1 aaa
2 bbb

逆順で処理する:reverse関数

reversed関数を使うことで要素を逆順で取得できます。

nums = [1, 2, 3]

for num in reversed(nums):
    print(num)

実行結果

3
2
1

まとめ

この記事では、Pythonの繰り返し処理の仕方について解説しました。

プログラミング言語は条件分岐繰り返し処理で成り立っていると言っても過言ではありません。頻繁に使用するのでよく覚えておきましょう!

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職「DMM WEBCAMP COMMIT」
なんと転職成功率98%!
今なら3日以内のカウンセリング枠を予約&参加で「1,000円分のAmazonギフト券」をプレゼント!