while, forループのelse

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.."
関連記事:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)