Pythonではwhile, forのループにelseを使えます。
これは他の言語には珍しい機能で、ありがちなケースでは「ループ処理で何かを探索して見つけたらbreakする、breakしなかったら見つからなかった」といったケースでフラグ変数を使う必要がなくなります。
elseを使わないループ
elseを使わない、ありがちなループ探索処理の場合は、見つかった場合にフラグを更新してbreakし、ループの外側でフラグの状態をチェックしたif文を記述します。
ary = [1, 3, 9, 2, 1]
exist = False
for n in ary:
if n == 9:
exist = True
break
if exist:
print "Found! 9"
else:
print "Not found 9.."
elseを使うループ
elseを使った場合は、existフラグを使用する必要がなくなります。
ary = [1, 3, 9, 2, 1]
for n in ary:
if n == 9:
print "Found! 9"
break
else:
print "Not found 9.."
elseブロックが処理されるのは、「breakでループを抜けなかった時」です。厳密に言うと「ループを一度も実行しなかった時」も含まれます。
たとえば以下のケースは、aryが長さ0のリストなのでループ内は一度も処理しません。したがってelseブロックが実行されます。
「elseブロックは、breakせずにループが回りきったとき実行される」と覚えておきましょう
ary = []
for n in ary:
if n == 9:
print "Found! 9"
break
else:
print "Not found 9.."