pythonでのループ ~for文の使い方3種~

python_for
  • URLをコピーしました!
※当ブログではアフィリエイト広告を表示しています

機械学習などで現在流行っているpythonですが、そのfor文(ループ)の使い方を3種紹介します。

今回紹介するのは、基本形、複数変数ループ(zip)、インデックス同時取得(enumerate)です。

目次

基本形: for文

まずは基本形

# loop_py.py
a = [0, 10, 20, 30]
for a_cont in a:
    print(a_cont)

#出力
# 0
# 10
# 20
# 30

リストaの中身が、for文でa_contに代入されて、printされます。

numpyの配列でも同じです。

# loop_py.py

import numpy as np

a = np.array([0, 10, 20, 30])
for a_cont in a:
    print(a_cont)

#出力
# 0
# 10
# 20
# 30

全く同じようになります。

途中でループを抜ける方法: break文

途中でループを抜けるときはbreak文を使えば抜けられる。

# loop_break_py.py

a = [0, 10, 20, 30]
for a_cont in a:
    print(a_cont)
    if a_cont == 20:
        print("break!!!")
        break

#出力
# 0
# 10
# 20
# break!!!

a_contが「20」になった時に、if文で条件が適合して、break文によってループの外に出たのがわかります。

ループが最後まで回った場合: else文

ここで面白い機能を紹介します。else文です。

早速、例えを。

# loop_else_py.py

a = [0, 10, 20, 30]
for a_cont in a:
    print(a_cont)
    if a_count == 40: # a_contはここを満たすことはなく、break文にはたどり着けない。
        print("break!!!")
        break
else: #ループが最後まで行った場合にはここが実行される。
    print("loop end")

#出力
# 0
# 10
# 20
# 30
# loop end

上記のコードの場合には、for文によるループが最後まで行き、else文内に入りprint文が実行されて終了します。

これの何が良いかというと、ループ内のbreak文によって抜けた場合にはelse文配下が実行されず、最後までループを回った場合にはelse文配下が実行されます

これを古典言語、例えばfortranで実現するには、ループの最後まで行った時にフラグを立てて、それをロープ文後で検知して、実行することになります。面倒。

複数変数ループ: zip文

次に複数のリストを同時にループさせるやり方です。

インデックスをループさせるのではなく、zip文を使います。

#loop_zip.py
a = [0, 10, 20, 30]
b = [2, 4, 8, 16]

for a_cont, b_cont in zip(a, b):
    print(a_cont, b_cont)

#出力
# 0 2
# 10 4
# 20 8
# 30 16

このようにして、2つのリストa, bを同時に回すことができます。

各要素を使った演算などができます。

もちろん2つに限らず、3つでも、4つでもできますし、numpy配列でもできます。

ちなみにもしも要素の数が異なった時には、一番要素数の小さい配列に合わせてfor文が終了します。

インデックス(index)同時取得: enumerate文

最後にenumerate文を紹介します。

これは、リスト(配列)の中身(値)とともに、そのインデックスも取得するコマンドになります。

#loop_enu.py

a=[0, 1, 1, 2, 3, 5, 8]

for i, a_cont in enumerate(a):
    print(i, a_cont) # iにはインデックスが代入されて、a_contには値が代入されている。

#出力
# 0 0
# 1 1
# 2 1
# 3 2
# 4 3
# 5 5
# 6 8

このenumerate文を使用すると、2つ情報が取得されます。

第一にインデックスが取得されて、上記の場合にはiに代入されます。

第二に要素値が取得されて、上記の場合にはa_contに代入されます。

これでインデックスも同時に取得ができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

関連記事

応援よろしくお願いします☆

この記事を書いた人

天文の博士号をもつ理系パパ。
3歳の娘を子育て中。
最近はダイエットに挑戦中!

コメント

コメントする

目次