In Python, loops are essential for performing repetitive tasks efficiently. A nested loop means having one loop inside another. This structure allows developers to handle multidimensional data, generate patterns, and work on more complex logic structures. Understanding nested loops is a key skill for mastering Python programming.
In this tutorial, we’ll explore how nested loops in Python work, when to use them, and provide multiple practical examples with detailed explanations. By the end, you’ll be able to write and understand nested loops confidently.

What is a Nested Loop in Python?
A nested loop is a loop within another loop. The inner loop executes completely for every iteration of the outer loop. This means that if the outer loop runs n
times and the inner loop runs m
times, the total number of iterations will be n * m
.
# Basic example of a nested loop for i in range(3): # Outer loop for j in range(2): # Inner loop print(f"i = {i}, j = {j}")
Output:
i = 0, j = 0 i = 0, j = 1 i = 1, j = 0 i = 1, j = 1 i = 2, j = 0 i = 2, j = 1
As you can see, for every iteration of i
, the inner loop executes completely. This pattern continues until the outer loop finishes.
Common Use Cases of Nested Loops
- Working with 2D lists or matrices.
- Creating patterns using stars or numbers.
- Implementing sorting algorithms.
- Generating multiplication tables.
- Performing data processing on multidimensional arrays.
Example 1: Multiplication Table Using Nested Loops
One of the most common uses of nested loops is generating a multiplication table.
# Multiplication Table for i in range(1, 6): for j in range(1, 6): print(f"{i*j:2}", end=" ") print()
Output:
1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25
This nested loop multiplies each i
by each j
and prints the result in a formatted grid.
Example 2: Printing a Star Pattern
Nested loops are also widely used for pattern generation. Here’s a simple example of printing a right-angled triangle with stars:
# Right-Angled Triangle Pattern for i in range(1, 6): for j in range(i): print("*", end="") print()
Output:
* ** *** **** *****
In this case, the outer loop controls the number of rows, while the inner loop controls how many stars are printed in each row.
Example 3: Iterating Through a 2D List (Matrix)
Nested loops are essential when working with 2D lists or matrices, where each element is another list.
# 2D List Iteration Example matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] for row in matrix: for item in row: print(item, end=" ") print()
Output:
1 2 3 4 5 6 7 8 9
Each row is a list itself, and the inner loop iterates through the elements inside that row.
Example 4: Nested Loop with Conditional Statements
Sometimes, you might want to use nested loops together with if
statements to create more specific outputs.
# Print only even results from a multiplication table for i in range(1, 6): for j in range(1, 6): if (i * j) % 2 == 0: print(f"{i*j}", end=" ") print()
Output:
2 4 2 4 6 8 10 4 6 8 10 12 6 8 10 12 14 8 10 12 14 16
This example shows how conditions can filter specific results during nested loop iterations.
Example 5: Nested Loops with Different Ranges
You can use different ranges for each loop to create various logical outcomes.
# Nested loop with different ranges for i in range(3): for j in range(5): print(f"i={i}, j={j}") print("---")
Output:
i=0, j=0 i=0, j=1 i=0, j=2 i=0, j=3 i=0, j=4 --- i=1, j=0 ...
This is useful when working with data of different sizes in nested structures.
Example 6: Using Nested Loops for Coordinate Pairs
Nested loops can generate coordinate-like combinations. This is often used in game development or grid systems.
# Generating coordinate pairs for x in range(3): for y in range(3): print(f"({x}, {y})", end=" ") print()
Output:
(0, 0) (0, 1) (0, 2) (1, 0) (1, 1) (1, 2) (2, 0) (2, 1) (2, 2)
Tips for Optimizing Nested Loops
- Avoid unnecessary nested loops when possible. They can increase time complexity.
- Try to use list comprehensions or built-in functions for simpler tasks.
- Break out of loops early using
break
when certain conditions are met. - Consider using algorithms that reduce nested loops for large data processing.
Example 7: Breaking from Nested Loops
Sometimes, you may want to stop both loops when a certain condition is met.
# Break example in nested loop for i in range(3): for j in range(3): if i == 1 and j == 1: print("Breaking the loop") break print(f"i={i}, j={j}") else: continue break
Output:
i=0, j=0 i=0, j=1 i=0, j=2 i=1, j=0 Breaking the loop
Conclusion
Nested loops in Python are a powerful tool for handling complex tasks involving repetition within repetition. They allow developers to iterate through multidimensional data, create visual patterns, or perform structured calculations efficiently. However, nested loops should be used wisely, as excessive nesting can lead to reduced code readability and performance issues.
With these examples and explanations, you can now practice writing your own nested loops and experiment with different logic combinations. For more details on Python loops, you can read the official Python documentation at https://docs.python.org/3/tutorial/controlflow.html.