Nested list comprehension helps you create lists inside lists quickly and clearly. It saves time and makes your code shorter.
Nested list comprehension in Python
Start learning this pattern below
Jump into concepts and practice - no test required
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] new_matrix = [[expression for item in inner_list] for inner_list in matrix]
The outer loop goes last in the syntax but runs first in logic.
You can add conditions inside either the inner or outer loop.
matrix = [[1, 2], [3, 4]] squared = [[item**2 for item in row] for row in matrix] print(squared)
matrix = [] result = [[item*2 for item in row] for row in matrix] print(result)
matrix = [[5]] doubled = [[item*2 for item in row] for row in matrix] print(doubled)
matrix = [[1, 2, 3], [4, 5, 6]] filtered = [[item for item in row if item % 2 == 0] for row in matrix] print(filtered)
This program shows how to double every number in a nested list using nested list comprehension.
def print_matrix(matrix): for row in matrix: print(row) original_matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print("Original matrix:") print_matrix(original_matrix) # Create a new matrix with each number doubled new_matrix = [[item * 2 for item in row] for row in original_matrix] print("\nNew matrix with doubled values:") print_matrix(new_matrix)
Time complexity is O(n*m) where n is number of inner lists and m is number of items in each.
Space complexity is also O(n*m) because a new list is created.
Common mistake: mixing up the order of loops or forgetting to nest the inner loop inside the outer one.
Use nested list comprehension when you want concise code for nested loops; use regular loops if you need more complex logic or debugging.
Nested list comprehension lets you create or transform lists inside lists in one line.
It is useful for working with tables, grids, or any nested data.
Remember the outer loop goes last in the syntax but runs first in logic.
Practice
[[x * 2 for x in range(3)] for _ in range(2)]Solution
Step 1: Understand inner list comprehension
The inner part[x * 2 for x in range(3)]creates a list by doubling numbers 0, 1, 2 resulting in [0, 2, 4].Step 2: Understand outer list comprehension
The outer loop runs twice (for _ in range(2)), repeating the inner list twice, making [[0, 2, 4], [0, 2, 4]].Final Answer:
Creates a list of two lists, each with numbers doubled from 0 to 2 -> Option DQuick Check:
Nested loops create repeated doubled lists [OK]
- Confusing outer and inner loops
- Thinking it creates a flat list
- Miscounting range values
Solution
Step 1: Identify correct nested comprehension syntax
[[0 for _ in range(3)] for _ in range(3)] uses two for loops inside list brackets correctly: outer and inner loops create rows and columns.Step 2: Check other options for syntax errors
[0 for _ in range(3) for _ in range(3)] is flat comprehension, not nested. [[0] * 3] * 3 uses list multiplication but not comprehension. [0] * 3 for _ in range(3) is invalid syntax.Final Answer:
[[0 for _ in range(3)] for _ in range(3)] -> Option CQuick Check:
Nested loops inside brackets = correct syntax [OK]
- Using flat comprehension instead of nested
- Incorrect list multiplication for nested lists
- Syntax errors with missing brackets
matrix = [[i + j for j in range(3)] for i in range(2)] print(matrix)
Solution
Step 1: Understand inner loop values
For each i, inner loop adds j (0,1,2) to i. For i=0: [0+0, 0+1, 0+2] = [0,1,2]. For i=1: [1+0, 1+1, 1+2] = [1,2,3].Step 2: Combine results into outer list
The outer loop runs for i in range(2), so final list is [[0,1,2], [1,2,3]].Final Answer:
[[0, 1, 2], [1, 2, 3]] -> Option AQuick Check:
Sum of i and j in nested loops = output [OK]
- Mixing i and j values
- Confusing list dimensions
- Incorrect range usage
result = [[x * y for x in range(3)] for y in range(3)] print(result)
Solution
Step 1: Check variable definitions
Both x and y are defined in their respective loops: x in inner, y in outer.Step 2: Verify syntax and logic
Syntax is correct with proper brackets. The code multiplies x and y for each pair in ranges 0 to 2.Final Answer:
No error, code runs correctly -> Option AQuick Check:
Variables defined in loops, syntax correct [OK]
- Thinking variables are undefined
- Confusing loop order
- Assuming syntax error without checking
data = [[1, 0, 3], [0, 5, 0], [7, 0, 9]]
to replace all zeros with the string 'zero'?
Solution
Step 1: Use nested loops to access each element
Outer loop goes through each row, inner loop through each element x in that row.Step 2: Replace zeros with 'zero' using conditional expression
Use'zero' if x == 0 else xinside inner loop to transform elements.Step 3: Combine into nested list comprehension
Putting it together:[[ 'zero' if x == 0 else x for x in row ] for row in data].Final Answer:
[['zero' if x == 0 else x for x in row] for row in data] -> Option BQuick Check:
Conditional inside nested comprehension replaces zeros [OK]
- Mixing loop variables
- Placing condition on wrong variable
- Incorrect loop order or syntax
