2016-11-15 4 views
2

これらのループセットの違いは何ですか?Pythonでネストされたループを壊すには?

for i in range(0,5): 
    print i,'i' 
    for x in range(0,4): 
     print x,'x' 
    break 

for i in range(0,5): 
    print i,'i' 
    for x in range(0,4): 
     print x,'x' 
     break 

break文のスコープは何ですか?

+1

あなたの質問を編集して、あなたのコードをフォーマットするためのツールを使用してください。 – Soviut

答えて

8

breakは、内部にある最も内側のループから抜け出すだけです。あなたの最初の例は外側のループから切り離され、2番目の例は内側のループからのみ外れます。

複数のループから脱出するには、親ループが発生するたびに終了してチェックするかどうかを追跡する変数を使用する必要があります。

0

最初のコードでは、 'break'は 'for'の外側に属します。したがって、内側 'for'ループは中断なしに実行され、外側 'for'は1回だけ実行されます。

2番目のコードでは、 'break'は 'for'の内側に属します。したがって、外側 'for'は中断なしに実行されますが、内側 'for'は各繰り返しで1回だけ実行されます。

差はインデントに関してです。

2

Pythonでは、ループの中にブレークが起こっていないとき、またはループが自然に終了するときに実行されるループのためにelse節を書くことができます。 ときどきを使用すると、複数のループからブレークすることができます。

for i in some_range: 
    for j in some_other_range: 
     if need_break(i, j): 
      break 
    else: 
     continue 
    break # break happens in inner loop, break outer loop too. 
0

また、このような例外を除いてこれを行うことができます。

class ForLoopBreak(Exception): 
    pass 

try: 
    for i in range(5): 
     for j in range(5): 
      print "({}, {})".format(i, j) 
      if i == 1 and j == 1: 
       # Break out of both for loops for this case 
       raise ForLoopBreak() 

except ForLoopBreak: 
    pass 

# Output 
(0, 0) 
(0, 1) 
(0, 2) 
(0, 3) 
(0, 4) 
(1, 0) 
(1, 1) 
関連する問題