Python

【Python】for文を使ってループ処理をする方法

この記事では、Pythonのfor文の使い方を解説します。

プログラミングでは、同じような処理を繰り返したい時がよくあります。普通に書くと繰り返す回数だけ処理を書くことになりますが、めんどくさいし効率も良くありません。

なので、Pythonで繰り返し処理を行いたい場合には、for文を使います。

for文を使うことでイテラブル(リストやタプルなど)の要素を順番に1つずつ取り出し、for文ブロック内の処理を繰り返すことができます。

その際、取り出したイテラブルの要素はfor文ブロック内で使用することができます。

条件式でループ処理したい場合は、while文を使います。

while文を使ったループ処理

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

for文の使い方

for文は、以下のようにイテラブルを使ってループ処理します。

for 変数名 in イテラブル:
    何かしらの処理

指定されたイテラブルの要素が1つずつ順番に変数に代入され、ブロック内の処理が反復されます。イテラブルの要素が取り出せなくなった時点でループが終了します。

要素が代入された変数は、for文ブロック内で使用可能です。

イテラブルとは?

イテラブルとはリストやタプル、文字列などの反復可能なオブジェクトのことを言います。詳しく知りたい方は以下の記事を参照してください。

イテラブルとイテレータについて解説

サンプル

例えば、リストの要素を1つずつ出力するには、以下のようなコードになります。

vals = [1, 2, 3]

for v in vals:
    print(v)

実行結果

1
2
3

valsの要素がvに1つずつ代入され、for文ブロック内のprint()関数がループ処理されることによってすべての要素が出力されています。

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

for文とrange()関数を組み合わせることで任意の回数だけループ処理させることができます。

range()関数は、数列を生成する関数です。

range関数を使って数列を生成する方法を解説

以下のコードでは、3回ループ処理しています。

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

実行結果

0
1
2

負の数や初期値を指定することもできる。

for i in range(2, -3, -1):
    print(i)

実行結果

2
1
0
-1
-2

取り出した要素を使用しない場合は、_(アンダースコア)を使うと安全です。

for _ in range(3):
    print('abc')

実行結果

abc
abc
abc

処理をスキップ:continue

ループ処理をスキップするには、continueを使います。

処理をスキップしたい回でcontinueが実行されるようにfor文ブロック内に記述することで、その回のループ処理をスキップすることができます。

continueが実行された回の処理のみスキップするので以降もループ処理は継続されます。

例えば、ある値が偶数の時のみ処理をスキップしたいと思ったら以下のように記述します。

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

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

実行結果

1
3
5

偶数の値が出力されていないので処理がスキップされているのが分かります。

処理を中断:break

ループ処理を中断するには、breakを使います。

何かしらの値を受け取った際にbreakが実行されるようにfor文ブロック内に記述することでループ処理を途中で終了することができます。

以下のコードでは、'end'が処理される際にbreakが実行されてループ自体が終了します。

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

実行結果

a
b

abしか出力されなかったのでfor文が中断されたのがわかります。

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

for文のオプションとしてelseが用意されています。elseは、for文が正常終了した際に処理されるブロックを定義できます。

l = [1, 2, 3]

for i in l:
    print(i)
# for文の後に記述する
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

上記コードは、スライスを用いてstart4stop7を指定し、インデックスが4 < N <= 7の要素のみを使ってループ処理しました。

シーケンスの要素を任意の範囲で取得するスライスの使い方

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

for文とenumerate()関数を組み合わせて使うことで要素とインデックスを同時に扱うことができます。

enumerate(iterable, start=0)

簡単なサンプルを見てみましょう。

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

for i, v in enumerate(vals):
    print(i, v)

実行結果

0 a
1 b
2 c

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

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

for i, v in enumerate(vals, 1):
    print(i, v)

実行結果

1 a
2 b
3 c

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

for文とzip()関数を組み合わせて使うことで1つのfor文で複数のイテラブルを扱ってループ処理できます。

nums = [1, 2, 3]
vals = ['a', 'b', 'c']

for n, v in zip(nums, vals):
    print(n, v)

実行結果

1 a
2 b
3 c

2つ以上のイテラブルも同時に処理することができます。

l1= [1, 2, 3]
l2 = ['a', 'b', 'c']
l3 = [4, 5, 6]

for n1, n2, n3 in zip(l1, l2, l3):
    print(n1, n2, n3)

実行結果

1 a 4
2 b 5
3 c 6

イテラブルの長さが異なる場合は、短い方に合わせて実行されます。

nums = [1, 2, 3]
vals = ['a', 'b']

for num, v in zip(nums, vals):
    print(num, v)

実行結果

1 a
2 b

for文を何度も実行するのはコストがかかるのでできだけまとめて処理しちゃいましょう。

逆順で処理する:reversed関数

for文とreversed()関数を組み合わせて使うことで要素を逆順で取得することができます。

nums = [1, 2, 3]

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

実行結果

3
2
1

まとめ

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

Pythonに限らずプログラミングでは、「条件分岐」と「繰り返し処理」を非常によく使います。しっかり覚えておきましょう!

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