[Python]繰り返し処理(for文、while文の基本的な使い方)

本記事では、Pythonの「for文」「while文」を使った、繰り返し処理の基本的な使い方を紹介します。

こんな人におすすめ

  • Pythonの繰り返し処理の基本を学びたい
  • 「for文」と「while文」の使い方を学びたい
  • 繰り返し処理をスキップする「continue」、中止する「break」の使い方を学びたい
  • 「tqdm」を使って、処理の状況を確認したい
  • 「zip」を使って、2つ以上の要素に対して同時に繰り返し処理を行いたい
  • 「enumerate」を使って、繰り返し処理の回数を取得したい

関連ページ

簡単!Pythonで機械学習入門:繰り返し処理(内包処理の基本的な使い方)(準備中)

簡単!Pythonで機械学習入門:繰り返し処理(itertoolsの基本的な使い方)(準備中)

主なライブラリ

  • tqdm

本ページで使用するライブラリをインポートするときは以下のコードを使用します。

import random
from tqdm import tqdm

繰り返し処理(while文)

while文を使った繰り返し処理を実行します。
while文は、繰り返し回数が事前に決まっていない場合に使用します。
下記のケースではiが10未満の間、繰り返し処理を実行し、iが10以上になったら繰り返し処理を終了します。
繰り返し処理ではiにランダムに値が決まるjを足し込むため、事前に繰り返し回数が決まらないため、while文を利用しています。

i = 1
# iが10以上になったら繰り返し処理を終了する
while i < 10:
    # 1~3の整数をjにセット
    j = random.randint(1,4)

    # jをiに足し込み
    i += j

    print(i, j)
# 3 2
# 4 1
# 8 4
# 9 1
# 12 3

繰り返し処理(for文 range関数)

range関数とfor文を使った繰り返し処理を実行します。
for文は、繰り返し回数が事前に決まっている場合に使用します。
下記の処理ではrange関数を使用しています。
range(10)は0から10個の整数(0,1,2,3,4,5,6,7,8,9)をiにセットする繰り返し処理となります。

for i in range(10):
    print(i)
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9

繰り返し処理(for文 配列)

配列とfor文を使った繰り返し処理を実行します。
下記の処理では、iに配列の要素を1つづつセットしています。

# 配列を一つづつ取り出して処理を行う
list1 = [1, 2, 3]
for i in list1:
    print(i)
# 1
# 2
# 3

繰り返し処理をスキップする(continue)

continueを使うと、繰り返し処理をスキップすることができます。
下記の処理では、iが偶数の時に処理をスキップしています。

for i in range(10):
    # iが偶数の時はcontinue処理を行う
    if i % 2 == 0:
        continue

    # iが偶数の時はcontinueされるので奇数がprintされる。
    print(i)
# 1
# 3
# 5
# 7
# 9

繰り返し処理の処理を中止する(break)

breakを使うと、繰り返し処理を中止することができます。
下記の処理では、iが5以上の時に処理を中止しています。

for i in range(10):
    # iが5以上の時にbreakする
    if i >= 5:
        break

    # iが5以上の時にbreakするので4以下の数字がprintされる
    print(i)
# 0
# 1
# 2
# 3
# 4

繰り返し処理後に何か処理を実行したい

繰り返し処理の後に処理を実行したい場合、else句内に処理を記述します。

# 繰り返し処理のあと「処理終了」がprintされる
for i in range(10):
    print(i)
else:
    print('処理終了')
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 処理終了

else句の処理は繰り返し処理内でbreakされると実行されません。
else句の処理には、breakされた時に実行したくない処理を記述しましょう。

# 繰り返し処理宙にbreakした時、「処理終了」はprintされない。
for i in range(10):
    # iが5以上の時にbreakする
    if i >= 5:
        break

    # iが5以上の時にbreakするので4以下の数字がprintされる
    print(i)
else:
    print('処理終了')
# 0
# 1
# 2
# 3
# 4

繰り返し処理で複数の要素を同時に取得する(zip)

zip関数を使うと、1つの繰り返し処理で配列などの複数のオブジェクトから要素を取得することができます。
配列の要素数が異なるときは、要素数が少ないほうに合わせ繰り返し処理が実行さます。

list1 = [1, 2, 3]
list2 = [4, 5, 6, 7]
for i, j in zip(list1, list2):
    print(i, j)
# 1 4
# 2 5
# 3 6

また、zip関数は2つ以上のオブジェクトから同時に要素を取得することができます。

list1 = [1, 2, 3]
list2 = [4, 5, 6, 7]
list3 = [8, 9, 10]
for i, j, k in zip(list1, list2, list3):
    print(i, j, k)
# 1 4 8
# 2 5 9
# 3 6 10

繰り返し処置で要素とインデックスを取得する(enumerate)

enumerate関数を使うと、繰り返し取得する要素と合わせてインデックスを取得するすることができます。

list1 = ['a', 'b', 'c']
for i , j in enumerate(list1):
    print(i, j)
# 0 a
# 1 b
# 2 c

繰り返し処理の進捗を確認する(tqdm)

tqdm関数を使うと、繰り返し処理の進捗状況を確認することができます。
進捗状況は、「進捗率」「処理完了数」「繰り返し総数」「経過時間」「予想終了時間」を確認することができます。

for i in tqdm(range(5)):
    print(i)
# 100%|██████████| 5/5 [00:00]
# 0
# 1
# 2
# 3
# 4