# Iterate through lists using inner for-loops#

We’ve already seen nested for-loops in which we iterate through a list using the inner for-loop:

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

This is the code the researcher’s friend provided to print multiple copies of elements in `cases`.

Notice that the outer for-loop is just to repeat our inner for-loop for `n` times, while the inner for-loop is the one that iterates through cases and prints out the elements.

## Iterate through lists using outer for-loops#

We can also use the outer for-loop to iterate through a list, and do something with each element in the list using the inner for-loop!

Consider the following example code snippet:

The code above uses a nested for-loop, and it will calculate the factorial of each element in `lst` and print it out.

The code above uses a nested for-loop, and it will calculate the factorial of each element in `lst` and print it out. The output is:

```Factorial of the element at index 1 is: 1
Factorial of the element at index 2 is: 2
Factorial of the element at index 3 is: 6
Factorial of the element at index 4 is: 24
```

The following snippet shows how the loop gets unrolled to reach the above output. Notice how the number of iterations of the inner loop is dependent on the value of `n`, the elements of the list being traversed using the outer for-loop.

```#In the 1st iteration:

n = 1
factorial = 1 #factorial is set to 1
#The inner for loop equivalently becomes:
for j in range(1, 2):
factorial *= j
#The inner loop gets executed once and we get factorial = 1

#In the 2nd iteration:

n = 2
factorial = 1 #factorial is reset to 1
#The inner for loop equivalently becomes:
for j in range(1, 3):
factorial *= j
#The inner loop gets executed twice and we get factorial = 1*2 = 2

#In the 3rd iteration:

n = 3
factorial = 1 #factorial is reset to 1
#The inner for loop equivalently becomes:
for j in range(1, 4):
factorial *= j
#The inner loop gets executed thrice and we get factorial = 1*2*3 = 6

#In the 4th iteration:

n = 4
factorial = 1 #factorial is reset to 1
#The inner for loop equivalently becomes:
for j in range(1, 5):
factorial *= j
#The inner loop gets executed four times and we get factorial = 1*2*3*4 = 24
```

## Iterate through lists using both outer for-loops and inner for-loops?#

In fact, as you may probably guess, we can iterate through a list using the outer for-loop while at the same time iterate through a list using the inner for-loop! Since this is just a combination of the two previously discussed ways of using nested for-loops, we won’t get into it here. How about you try some exercises on it yourself?