Bird
Raised Fist0
Pythonprogramming~20 mins

List comprehension with if–else in Python - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
List Comprehension Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of list comprehension with if–else
What is the output of the following Python code?
Python
numbers = [1, 2, 3, 4, 5]
result = [x*2 if x % 2 == 0 else x+1 for x in numbers]
print(result)
A[2, 4, 4, 8, 6]
B[2, 2, 4, 4, 6]
C[2, 4, 4, 8, 5]
D[1, 4, 3, 8, 5]
Attempts:
2 left
💡 Hint
Remember that the if–else inside the list comprehension applies to each element before adding it to the list.
Predict Output
intermediate
2:00remaining
Value of variable after list comprehension
What is the value of output after running this code?
Python
values = [10, 15, 20]
output = ['even' if v % 2 == 0 else 'odd' for v in values]
A['even', 'even', 'even']
B['even', 'odd', 'even']
C['odd', 'odd', 'odd']
D['odd', 'even', 'odd']
Attempts:
2 left
💡 Hint
Check each number if it is divisible by 2.
Predict Output
advanced
2:00remaining
Output of nested list comprehension with if–else
What is the output of this nested list comprehension?
Python
matrix = [[1, 2], [3, 4]]
result = [[x*10 if x % 2 == 0 else x+5 for x in row] for row in matrix]
print(result)
A[[5, 20], [8, 40]]
B[[6, 2], [8, 40]]
C[[6, 20], [8, 4]]
D[[6, 20], [8, 40]]
Attempts:
2 left
💡 Hint
Apply the if–else to each element inside each inner list.
🔧 Debug
advanced
2:00remaining
Identify the error in list comprehension with if–else
Which option will cause a SyntaxError when running this code?
Python
nums = [1, 2, 3]
result = [x*2 if x > 1 for x in nums]
Aresult = [x*2 for x in nums if x > 1]
Bresult = [x*2 if x > 1 else x for x in nums]
Cresult = [x*2 if x > 1 for x in nums if x < 3]
Dresult = [x*2 if x > 1 else x for x in nums if x < 3]
Attempts:
2 left
💡 Hint
Check the placement of the if and else keywords in the comprehension.
🧠 Conceptual
expert
2:00remaining
Understanding evaluation order in list comprehension with if–else
Consider this code snippet:
result = [f(x) if cond(x) else g(x) for x in data]
Which statement best describes the evaluation order?
AFor each x in data, cond(x) is checked first; then either f(x) or g(x) is called accordingly.
BAll f(x) are computed first, then all g(x) are computed after.
CThe functions f and g are called only once each before the comprehension starts.
Dcond(x) is checked after f(x) and g(x) are both called for each x.
Attempts:
2 left
💡 Hint
Think about how list comprehensions process each element one by one.

Practice

(1/5)
1. What does the following list comprehension do?
[x if x % 2 == 0 else -x for x in range(5)]
easy
A. Creates a list of numbers from 0 to 4 without changes
B. Creates a list of numbers where even numbers stay the same and odd numbers become negative
C. Creates a list of only negative numbers from 0 to 4
D. Creates a list of only even numbers from 0 to 4

Solution

  1. Step 1: Understand the condition in the comprehension

    The condition x % 2 == 0 checks if a number is even.
  2. Step 2: Apply the if-else for each number in range(5)

    If even, keep x; if odd, use -x. So 0,2,4 stay same; 1,3 become -1,-3.
  3. Final Answer:

    Creates a list of numbers where even numbers stay the same and odd numbers become negative -> Option B
  4. Quick Check:

    if-else picks value based on even check = D [OK]
Hint: If-else picks value before for loop [OK]
Common Mistakes:
  • Thinking if-else goes after the for loop
  • Confusing condition meaning (odd vs even)
  • Ignoring the else part
2. Which of these is the correct syntax for a list comprehension with if-else in Python?
easy
A. [x if x > 0 else 0 for x in nums]
B. [x for x in nums if x > 0 else 0]
C. [if x > 0 then x else 0 for x in nums]
D. [x if x > 0 else 0 in nums]

Solution

  1. Step 1: Recall correct if-else placement in list comprehension

    The if-else expression must come before the for loop inside the brackets.
  2. Step 2: Check each option's syntax

    [x if x > 0 else 0 for x in nums] correctly places x if x > 0 else 0 before for x in nums. Others have syntax errors.
  3. Final Answer:

    [x if x > 0 else 0 for x in nums] -> Option A
  4. Quick Check:

    if-else before for loop = C [OK]
Hint: If-else must be before for in comprehension [OK]
Common Mistakes:
  • Putting if-else after the for loop
  • Using 'then' keyword (not in Python)
  • Missing for loop entirely
3. What is the output of this code?
nums = [1, 2, 3, 4]
result = [x*2 if x % 2 == 0 else x+1 for x in nums]
print(result)
medium
A. [2, 4, 4, 6]
B. [2, 4, 4, 4]
C. [2, 4, 4, 8]
D. [2, 2, 4, 8]

Solution

  1. 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.
  2. Step 2: Collect results in list

    The final list is [2, 4, 4, 6].
  3. Final Answer:

    [2, 4, 4, 6] -> Option A
  4. Quick Check:

    if even *2 else +1 = [2,4,4,6] [OK]
Hint: Check each item with condition carefully [OK]
Common Mistakes:
  • Mixing up multiplication and addition
  • Applying condition after the loop
  • Wrong output list length
4. Find the error in this list comprehension:
values = [10, 15, 20]
new_values = [x if x > 15 else x*2 for x in values if x]
medium
A. The if condition after the for loop is invalid syntax
B. The if-else expression must be inside parentheses
C. No error, code runs fine
D. The else part should come after the for loop

Solution

  1. Step 1: Analyze the list comprehension structure

    The if-else expression is before the for loop, and the trailing if filters values.
  2. Step 2: Confirm syntax correctness

    Trailing if after for is allowed to filter items; no syntax error here.
  3. Final Answer:

    No error, code runs fine -> Option C
  4. Quick Check:

    Trailing if filters allowed = B [OK]
Hint: Trailing if filters items, allowed after for [OK]
Common Mistakes:
  • Thinking trailing if is invalid
  • Expecting else after for loop
  • Misplacing parentheses
5. You have a list of temperatures in Celsius: 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?
hard
A. [temp for temp in temps if temp >= 0 else 'Freezing']
B. [temp if temp < 0 else 'Freezing' for temp in temps]
C. [temp if temp > 0 else 'Freezing' for temp in temps]
D. ['Freezing' if temp < 0 else temp for temp in temps]

Solution

  1. Step 1: Understand the condition and output

    Temperatures below 0 become 'Freezing', others stay numbers.
  2. 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 temp before the for loop. Others have wrong order or logic.
  3. Final Answer:

    ['Freezing' if temp < 0 else temp for temp in temps] -> Option D
  4. Quick Check:

    if-else before for, correct condition = A [OK]
Hint: Put if-else before for, condition matches output [OK]
Common Mistakes:
  • Swapping if and else parts
  • Placing if-else after for loop
  • Using filter if instead of if-else expression