# Breaking out a nested loop in Python

Let's have a look at nested loops in Python!

How can we break out of both loops with code on the inner loop?

``````for i in range(1, 4):
for j in range(1, 4):
if j == 2:
break # But please also break the outer loop!
print(i, j)
``````

## `else` block

One solution with an 𝚎𝚕𝚜𝚎 block:

If we are not stopped by any 𝚋𝚛𝚎𝚊𝚔 in the inner loop (that's what 𝚎𝚕𝚜𝚎 means), the rest of the outer loop will not be executed (𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚎)
If we are, the outer loop is terminated (𝚋𝚛𝚎𝚊𝚔), too

``````for i in range(1, 4):
for j in range(1, 4):
print(i, j)
if j == 2:
break
else:
continue
break
``````

## `itertools`

That doesn't look very pretty and anyone who sees that code has to think twice about it.

So, here is a more elegant solution using 𝚒𝚝𝚎𝚛𝚝𝚘𝚘𝚕𝚜

The 𝚙𝚛𝚘𝚍𝚞𝚌𝚝 method boils down our two loops into one:

``````import itertools
for i, j in itertools.product(range(1, 4), range(1, 4)):
print(i, j)
if j == 2:
break
``````

## A custom generator function

Using a generator function, we can replicate the behaviour of 𝚒𝚝𝚎𝚛𝚝𝚘𝚘𝚕𝚜' 𝚙𝚛𝚘𝚍𝚞𝚌𝚝 method.

The 𝚢𝚒𝚎𝚕𝚍 keyword makes the result of your function a generator.

``````def generator(outer_iterable, inner_iterable):
for i in outer_iterable:
for j in inner_iterable:
yield (i, j)

for (i, j) in generator(range(1, 4), range(1, 4)):
print(i, j)
if j == 2:
break
``````