Nested for loops

Nested for loops#

The researcher cannot come up with an idea to gracefully solve this problem, so she goes to her friend who is a tutor for CSE 8A at UC San Diego for help. Her friend replies, “Haha, this is when a true computer scientist shines!” Then she provides the following code:

for i in range(n):
    for j in range(len(cases)):
        print(cases[j])

where n is the number of copies she needs.

The researcher applies the code above, and surprisingly, it works!

The code above contains a structure called a “nested for-loop” because it is a loop inside a loop. WHAT?!!! Can you do that?!

Oh yes, you absolutely can!

How do nested for-loops work?#

We’ve seen for-loops before:

for i in range(3):
    print('Hello World!')

This will unroll to:

print('Hello World!')
print('Hello World!')
print('Hello World!')

Nested for-loops unroll the same way!

Let’s say n = 3. Then the code snippet the researcher’s friend provides above becomes:

for i in range(3):
    for j in range(len(cases)):
        print(cases[j])

This will unroll to:

for j in range(len(cases)):
    print(cases[j])

for j in range(len(cases)):
    print(cases[j])

for j in range(len(cases)):
    print(cases[j])

(each for loop above will also unroll)

which is the exact same code the researcher came up on her own before for printing copies for her 3 assistants!

For a simple for-loop, its job is to repeatedly execute codes within it. For nested for-loops, the outer for-loop’s job is the same: repeatedly execute code within it! However, this time, code within the outer for-loop contains another for-loop! The for-loop within the o**uter for-loop** is called inner for-loop.

It’s easy to see that the inner for-loop is just a regular simple for-loop, but there is also nothing special about the outer for-loop: it’s also a regular simple for-loop! Both the inner and the outer for-loops are just doing their basic job: repeatedly execute code within them.

But when we use structure like nested for-loops, they can provide us many more functionalities (like iterate through 2D lists and images which we will learn later) than just simple non-nested for-loops.