List comprehension with if–else in Python - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
We want to understand how the time needed to run a list comprehension with if-else changes as the input list grows.
Specifically, how does adding a condition inside the comprehension affect the work done?
Analyze the time complexity of the following code snippet.
numbers = [1, 2, 3, 4, 5]
result = [x * 2 if x % 2 == 0 else x + 1 for x in numbers]
This code creates a new list by doubling even numbers and adding one to odd numbers from the original list.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: One loop over the input list, checking each number and applying a simple calculation.
- How many times: Exactly once for each item in the list.
As the list gets bigger, the program does more checks and calculations, one for each item.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks and calculations |
| 100 | 100 checks and calculations |
| 1000 | 1000 checks and calculations |
Pattern observation: The work grows directly with the number of items; doubling the list doubles the work.
Time Complexity: O(n)
This means the time to finish grows in a straight line with the size of the input list.
[X] Wrong: "Adding an if-else inside the list comprehension makes it slower than a simple loop without conditions."
[OK] Correct: The if-else check happens once per item, just like any operation in a loop, so it does not add extra loops or nested work. The overall time still grows linearly.
Understanding how conditions inside list comprehensions affect time helps you write clear and efficient code, a skill valued in real projects and interviews.
"What if we replaced the if-else with two separate list comprehensions, one filtering evens and one filtering odds, then combined the results? How would the time complexity change?"
Practice
[x if x % 2 == 0 else -x for x in range(5)]Solution
Step 1: Understand the condition in the comprehension
The conditionx % 2 == 0checks if a number is even.Step 2: Apply the if-else for each number in range(5)
If even, keepx; if odd, use-x. So 0,2,4 stay same; 1,3 become -1,-3.Final Answer:
Creates a list of numbers where even numbers stay the same and odd numbers become negative -> Option BQuick Check:
if-else picks value based on even check = D [OK]
- Thinking if-else goes after the for loop
- Confusing condition meaning (odd vs even)
- Ignoring the else part
Solution
Step 1: Recall correct if-else placement in list comprehension
The if-else expression must come before the for loop inside the brackets.Step 2: Check each option's syntax
[x if x > 0 else 0 for x in nums] correctly placesx if x > 0 else 0beforefor x in nums. Others have syntax errors.Final Answer:
[x if x > 0 else 0 for x in nums] -> Option AQuick Check:
if-else before for loop = C [OK]
- Putting if-else after the for loop
- Using 'then' keyword (not in Python)
- Missing for loop entirely
nums = [1, 2, 3, 4] result = [x*2 if x % 2 == 0 else x+1 for x in nums] print(result)
Solution
Step 1: Evaluate each element with condition
For each number: if even, multiply by 2; if odd, add 1. So 1->2, 2->4, 3->4, 4->8.Step 2: Collect results in list
The final list is [2, 4, 4, 6].Final Answer:
[2, 4, 4, 6] -> Option AQuick Check:
if even *2 else +1 = [2,4,4,6] [OK]
- Mixing up multiplication and addition
- Applying condition after the loop
- Wrong output list length
values = [10, 15, 20] new_values = [x if x > 15 else x*2 for x in values if x]
Solution
Step 1: Analyze the list comprehension structure
The if-else expression is before the for loop, and the trailing if filters values.Step 2: Confirm syntax correctness
Trailing if after for is allowed to filter items; no syntax error here.Final Answer:
No error, code runs fine -> Option CQuick Check:
Trailing if filters allowed = B [OK]
- Thinking trailing if is invalid
- Expecting else after for loop
- Misplacing parentheses
temps = [22, -5, 0, 15, -10]. Use a list comprehension with if-else to create a new list where temperatures below 0 become the string 'Freezing', and others stay as numbers.Which code does this correctly?
Solution
Step 1: Understand the condition and output
Temperatures below 0 become 'Freezing', others stay numbers.Step 2: Check each option's if-else placement and logic
['Freezing' if temp < 0 else temp for temp in temps] correctly uses'Freezing' if temp < 0 else tempbefore the for loop. Others have wrong order or logic.Final Answer:
['Freezing' if temp < 0 else temp for temp in temps] -> Option DQuick Check:
if-else before for, correct condition = A [OK]
- Swapping if and else parts
- Placing if-else after for loop
- Using filter if instead of if-else expression
