Pythonのfor-else

Pythonにはfor-elseという一見変わった構文があり、python初心者にコードレビューで指摘するといい感じで驚いてもらえます


よくfor分の中である条件を探索し、ヒットすればループから抜けるというコードの後に、何かにヒットしかどうかをカウンタなり、フラグなりでチェックすることがあると思います。例えば以下のようなコード

import random

i = 0
for n in range(10):
    i += 1
    if n == random.randint(1, 10):
        print("You're lucky!" + str(n))
        break

if (i==10):
    print("You're unlucky!")

このようなコードがfor-elseを使用するとすっきり書くことができます

for n in range(10):
    if n == random.randint(1, 10):
        print("You're lucky!" + str(n))
        break
else:
    print("You're unlucky!")

上記のコードでelseは対応するfor文でbreakが実行されなかった際に実行されるコードです。だいぶすっきりしたコードになりました。

ちなみにwhileでも同様に使用できます。こちらもbreakではなく、条件がfalseでループが終了した場合にelseが実行されます

n = 0
while n < 10:
    n += 1
    if n == random.randint(1, 10):
        print("You're lucky!" + str(n))
        break
else:
    print("You're unlucky!")

おすすめ