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 

что сфера заявления перерыва?

+1

Пожалуйста, измените свой вопрос и использовать инструменты для форматирования кода. – Soviut

ответ

8

A break будет выходить из внутренней петли внутри. Ваш первый пример прерывается из внешнего цикла, второй пример вырывается из внутреннего цикла.

Чтобы вырваться из нескольких циклов, вам нужно использовать переменную, чтобы отслеживать, пытаетесь ли вы выйти и проверять ее каждый раз при возникновении родительского цикла.

is_looping = True 
for i in range(5): # outer loop 
    for x in range(4): # inner loop 
     if x == 2: 
      is_looping = False 
      break # break out of the inner loop 

    if not is_looping: 
     break # break out of outer loop 
0

В первом коде термин «разрыв» относится к внешнему «для». Следовательно, внутренний цикл 'for' будет выполняться без какого-либо перерыва, тогда как внешний 'for' будет выполняться только один раз.

Во втором коде 'break' принадлежит внутреннему 'for'. Таким образом, внешний 'for' будет выполнен без какого-либо перерыва, тогда как внутренний 'for' будет выполняться только один раз на каждой итерации.

Разница в отношении отступа.

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) 
Смежные вопросы