Python

【Python 7】ループ

環境

macOS Big Sur
Python3.8

for文

「for文」を使用することでループ処理(繰り返し処理)を実行できます。for文は次のように定義します。

for文

for 変数 in シーケンス:
    処理ブロック

「シーケンス」とは、順序を持つ連続した複数のデータの集まりをいいます。シーケンスの要素が順番に変数に代入され、その間、処理ブロックが繰り返し実行されます。

シーケンスには、文字列、リスト、タプル、range()関数等があります。文字列は文字、リストとタプルは要素、range()関数は数値が一つずつ順番に変数に代入され、繰り返し処理ブロックが実行されます。

シーケンスの代わりに辞書や集合を使用することもできます。辞書の場合、キーが1つずつ順番に変数に代入され、処理ブロックが実行されます。集合は、リストやタプルと同様に要素が順番に変数に代入され、処理ブロックが実行されます。

このように、ループ処理で要素を1つずつ取り出せるデータを「イテラブル」(繰り返し可能)といい、ループを使って要素を順番に取り出すことを「イテレーション」(反復処理)といいます。

>>> a = [1, 2, 3]
>>> for i in a:
...     print(i)
... 
1
2
3

# ブロック内で変数を使用しない場合は、変数にアンダースコア(_)を使用することがあります。
>>> for _ in range(3):
...     print('hello')
...
hello
hello
hello

 

range()関数

「range()関数」の括弧の中に整数を渡すと、「0」から「その数-1」までのシーケンスを作成します。例えば、range(10)は0から9までのシーケンスを作成します。

2つの整数を渡すことで、範囲を指定することもできます。

例えば、range(3, 10)は3から9までのシーケンスを作成します。整数が1つの場合は、最初の整数を0として省略していることになります。range(0, 10)とrange(10)は等しくなります。

3つの整数を渡すことで、範囲と増分(ステップ)を指定することができます。例えば、range(3, 10, 3)は3から9まで3ずつ増加させてシーケンスを作成します。

>>> for i in range(3, 10, 3):
...     print(i)
... 
3
6
9

>>> for i in range(-3, -10 ,-3):  # マイナスを指定することもできます。
...     print(i)
... 
-3
-6
-9

 

while文

「while文」を使用することで、条件を満たす間実行し続けるループを作れます。while文は次のように定義します。

while文

while 条件式:
    処理ブロック

※条件式は「【Python 6】条件分岐」で説明したものと同様です。

>>> a = 0
>>> while a < 4:
...     print(a)
...     a += 1
... 
0
1
2
3

 

常にTrueとなる式をwhile文に指定するとループが無限に繰り返されます。このように終了しないループを「無限ループ」といいます。インタラクティブシェル上で無限ループを止めるにはCtrlキー+Cキーを入力します。

break文、continue文

「break文」を使用することで、処理ブロックから抜けることができます。

「continue文」を使用することで、以降のループブロックを実行せず、最初に戻ってループを続けることができます。

break文及びcontinue文は、for文やwhile文のループの中でのみ使用でき、それを囲んだもっとも小さなループに適用されます。

# break文の例。
>>> for i in range(1, 10):
...     if i % 5 == 0:  # 5で割り切れる数の場合、if文が実行されます。
...         break  # ループを抜けます。
...     print(i)
... 
1
2
3
4

# continue文の例。
>>> for i in range(1, 10):
...     if i % 5 == 0:  # 5で割り切れる数の場合、if文が実行されます。
...         continue  # 最初に戻ってループを続けます。
...     print(i)
... 
1
2
3
4
6
7
8
9

 

else文

for文やwhile文を使ったループに「else文」を添えることができます。

else文を使用することで、ループ実行後の処理ブロックを定義することができます。

else文を使用せずに処理を指定した場合と変わらないように見えますが、for文やwhile文でbreak文が実行された場合、else文のブロックも実行されないという違いがあります。

>>> a = [2, 3, 5, 7, 9]
>>> for i in a:
...     if i == 5:
...         print('aは5を含む。')
...         break
... else:
...     print('aは5を含まない。')
... 
aは5を含む。