Bird
Raised Fist0
Pythonprogramming~10 mins

List comprehension with condition in Python - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - List comprehension with condition
Start with a list
For each item in list
Check condition?
NoSkip item
Yes
Apply expression to item
Add result to new list
Repeat for all items
Return new filtered list
This flow shows how list comprehension goes through each item, checks a condition, and includes only those items that meet the condition in the new list.
Execution Sample
Python
numbers = [1, 2, 3, 4, 5]
even_squares = [x*x for x in numbers if x % 2 == 0]
print(even_squares)
This code creates a new list of squares of even numbers from the original list.
Execution Table
StepCurrent item (x)Condition (x % 2 == 0)ActionNew list state
11FalseSkip 1[]
22TrueAdd 4 (2*2)[4]
33FalseSkip 3[4]
44TrueAdd 16 (4*4)[4, 16]
55FalseSkip 5[4, 16]
End--Finished iteration[4, 16]
💡 All items processed; only even numbers squared and added to new list.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5Final
x-12345-
even_squares[][][4][4][4, 16][4, 16][4, 16]
Key Moments - 3 Insights
Why are some items skipped and not added to the new list?
Items are skipped when the condition (x % 2 == 0) is False, as shown in steps 1, 3, and 5 in the execution table where the action is 'Skip'.
What does the expression 'x*x' do in the list comprehension?
It calculates the square of the current item x, which is added to the new list only if the condition is True, as seen in steps 2 and 4.
Is the original list changed by the list comprehension?
No, the original list 'numbers' remains unchanged; the comprehension creates a new list 'even_squares' as shown in the variable tracker.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the new list after processing the item 4?
A[4]
B[16]
C[4, 16]
D[]
💡 Hint
Check the 'New list state' column at step 4 in the execution table.
At which step does the condition become False for the first time?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Look at the 'Condition' column in the execution table; step 1 shows False first.
If we change the condition to 'x > 3', what will be the new list after step 5?
A[16, 25]
B[4, 16]
C[9, 16, 25]
D[1, 2, 3, 4, 5]
💡 Hint
Check which numbers are greater than 3 and their squares.
Concept Snapshot
List comprehension with condition syntax:
  [expression for item in iterable if condition]
Creates a new list by including only items that satisfy the condition.
Expression is applied only to items passing the condition.
Original list remains unchanged.
Useful for filtering and transforming lists in one line.
Full Transcript
This visual trace shows how list comprehension with a condition works in Python. We start with a list of numbers. For each number, we check if it is even (condition x % 2 == 0). If it is, we square it and add it to a new list. If not, we skip it. The execution table tracks each step, showing which items are processed, which are skipped, and how the new list grows. The variable tracker shows the values of the current item and the new list after each step. Key moments clarify why some items are skipped, what the expression does, and that the original list is not changed. The quiz questions help reinforce understanding by asking about the list state at specific steps and the effect of changing the condition.

Practice

(1/5)
1. What does the following list comprehension do?
[x for x in range(5) if x % 2 == 0]
easy
A. Creates a list of odd numbers from 0 to 4
B. Creates a list of even numbers from 0 to 4
C. Creates a list of numbers from 1 to 5
D. Creates a list of numbers divisible by 3

Solution

  1. Step 1: Understand the range and condition

    The range(5) generates numbers 0, 1, 2, 3, 4. The condition x % 2 == 0 selects numbers divisible by 2 (even numbers).
  2. Step 2: Apply the condition to each number

    From 0 to 4, the even numbers are 0, 2, and 4. These are included in the new list.
  3. Final Answer:

    [0, 2, 4] -> Option B
  4. Quick Check:

    Even numbers from 0 to 4 = [0, 2, 4] [OK]
Hint: Look for the condition after 'if' to filter items [OK]
Common Mistakes:
  • Confusing even and odd numbers
  • Ignoring the condition and taking all numbers
  • Misunderstanding the range function
2. Which of the following is the correct syntax for a list comprehension that selects numbers greater than 10 from list nums?
easy
A. [x for x > 10 in nums]
B. [x if x > 10 for x in nums]
C. [if x > 10 for x in nums]
D. [x for x in nums if x > 10]

Solution

  1. Step 1: Recall list comprehension syntax

    The correct syntax is [expression for item in iterable if condition]. Here, expression and item are both x, iterable is nums, and condition is x > 10.
  2. Step 2: Check each option

    [x for x in nums if x > 10] matches the correct syntax. The other options have misplaced or missing parts.
  3. Final Answer:

    [x for x in nums if x > 10] -> Option D
  4. Quick Check:

    Correct list comprehension syntax = [x for x in nums if x > 10] [OK]
Hint: Remember: for comes before if in list comprehension [OK]
Common Mistakes:
  • Placing 'if' before 'for'
  • Omitting 'for' keyword
  • Using incorrect order of clauses
3. What is the output of this code?
nums = [3, 7, 12, 5, 20]
result = [n*2 for n in nums if n > 6]
print(result)
medium
A. [14, 24, 40]
B. [3, 7, 12, 5, 20]
C. [6, 14, 24, 10, 40]
D. [12, 24, 40]

Solution

  1. Step 1: Identify numbers greater than 6

    From the list, numbers greater than 6 are 7, 12, and 20.
  2. Step 2: Multiply each selected number by 2

    7*2=14, 12*2=24, 20*2=40. These form the new list.
  3. Final Answer:

    [14, 24, 40] -> Option A
  4. Quick Check:

    Filter >6 and double = [14, 24, 40] [OK]
Hint: Apply condition first, then transform each item [OK]
Common Mistakes:
  • Multiplying all numbers, ignoring condition
  • Including numbers less than or equal to 6
  • Confusing multiplication with addition
4. Find the error in this list comprehension:
values = [1, 2, 3, 4]
new_values = [x for x in values if x > 2 else 0]
medium
A. SyntaxError due to incorrect use of else in list comprehension
B. No error, code runs fine
C. TypeError because of wrong condition
D. NameError because x is undefined

Solution

  1. Step 1: Understand list comprehension with condition

    In list comprehension, 'if' can be used to filter items, but 'else' must be part of a conditional expression, not after 'if' alone.
  2. Step 2: Identify the syntax error

    The code uses 'if x > 2 else 0' incorrectly. The correct way is to use a conditional expression inside the expression part, like [x if x > 2 else 0 for x in values].
  3. Final Answer:

    SyntaxError due to incorrect use of else in list comprehension -> Option A
  4. Quick Check:

    Else must be inside expression, not after if clause [OK]
Hint: Use if-else inside expression, not after if clause [OK]
Common Mistakes:
  • Placing else after if in list comprehension filter
  • Confusing filter condition with conditional expression
  • Ignoring Python syntax rules for comprehensions
5. You have a list of strings: words = ['apple', '', 'banana', 'cherry', '', 'date']. Which list comprehension creates a new list with only non-empty strings in uppercase?
hard
A. [w for w in words if w.upper()]
B. [w.upper() if w else w for w in words]
C. [w.upper() for w in words if w]
D. [w.upper() for w in words if w == '']

Solution

  1. Step 1: Understand filtering non-empty strings

    In Python, empty strings are false in boolean context. Using if w filters out empty strings.
  2. Step 2: Convert filtered strings to uppercase

    For each non-empty string w, w.upper() converts it to uppercase.
  3. Final Answer:

    [w.upper() for w in words if w] -> Option C
  4. Quick Check:

    Filter non-empty and uppercase = [w.upper() for w in words if w] [OK]
Hint: Use 'if w' to filter non-empty strings in list comprehension [OK]
Common Mistakes:
  • Filtering empty strings incorrectly
  • Using if-else incorrectly inside comprehension
  • Not converting strings to uppercase