Продолжить внешний цикл при выполнении условия во внутреннем цикле

Вот код:

s=int(input())
matrix=[input().split() for i in range(s)]
print(matrix)
for i in range(s):
    for j in range(s):
        if matrix[i][j]==matrix[i][i]:
            continue

Вопрос: как применить continue к внешнему циклу при выполнении условия?


Ответы (2 шт):

Автор решения: Stanislav Volodarskiy
for i in range(s):
    for j in range(s):
        if matrix[i][j]==matrix[i][i]:
            break
    else:
        # мы окажемся здесь, если break не случился
        continue
    # мы окажемся здесь, если break случился
    continue
→ Ссылка
Автор решения: Exci

Хочется отметить, что вариант:

for i in range(s):
    for j in range(s):
        if matrix[i][j]==matrix[i][i]:
            break
    else:
        continue

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

Далее, вопрос выглядит не до конца раскрытым, ведь чтобы имело смысл делать continue во внешнем цикле for, нужно, чтобы там был какой-то код, типа:

for i in range(s):
    for j in range(s):
        if matrix[i][j]==matrix[i][i]:
            break
    some_method()

Далее - можно даже использовать переменную j после внешнего цикла, так как она сохраняется, единственное - она может быть не проинициализирована, если вдруг цикл по j будет пустым:

for i in range(3):
    for j in range(3):
        if matrix[i][j]==matrix[i][i]:
            break
    if matrix[i][j] == matrix[i][i]:
        continue
    some_method()

Последнее, что хотел отметить - в данном коде всегда будет выполняться условие matrix[i][j]==matrix[i][i] в тривиальном случае - когда j=i, следовательно, каждый цикл по j он будет выходить во внешний, и каждый раз будет выполняться внешнее условие, и вызов some_method() никогда не сработает. Если это учебный код, то кажется, что он не слишком наглядный.

→ Ссылка