ネストされたループからの脱出 [重複] 質問する

ネストされたループからの脱出 [重複] 質問する

例外をスローするよりもネストされたループから抜け出す簡単な方法はありますか?(パール各ループにラベルを付けて、少なくとも外側のループを継続することができます。

for x in range(10):
    for y in range(10):
        print x*y
        if x*y > 50:
            "break both loops"

つまり、これより良い方法があるでしょうか:

class BreakIt(Exception): pass

try:
    for x in range(10):
        for y in range(10):
            print x*y
            if x*y > 50:
                raise BreakIt
except BreakIt:
    pass

ベストアンサー1

for x in xrange(10):
    for y in xrange(10):
        print x*y
        if x*y > 50:
            break
    else:
        continue  # only executed if the inner loop did NOT break
    break  # only executed if the inner loop DID break

より深いループでも同じことが言えます:

for x in xrange(10):
    for y in xrange(10):
        for z in xrange(10):
            print x,y,z
            if x*y*z == 30:
                break
        else:
            continue
        break
    else:
        continue
    break

おすすめ記事