Bird
Raised Fist0
Pythonprogramming~10 mins

List comprehension with if–else in Python - Interactive Code Practice

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a list that doubles each number in the range 1 to 5.

Python
result = [x[1]2 for x in range(1, 6)]
print(result)
Drag options to blanks, or click blank then click option'
A**
B*
C+
D-
Attempts:
3 left
💡 Hint
Common Mistakes
Using '+' instead of '*' will add 2 instead of doubling.
Using '**' will square the number, not double it.
2fill in blank
medium

Complete the code to create a list that labels numbers as 'even' or 'odd' using if–else inside a list comprehension.

Python
labels = ['even' if x[1] 2 == 0 else 'odd' for x in range(1, 6)]
print(labels)
Drag options to blanks, or click blank then click option'
A%
B+
C//
D**
Attempts:
3 left
💡 Hint
Common Mistakes
Using '+' or '**' will not check divisibility.
Using '//' gives the quotient, not the remainder.
3fill in blank
hard

Fix the error in the list comprehension that should replace negative numbers with 0.

Python
numbers = [-3, 5, -1, 7]
result = [x if x [1] 0 else 0 for x in numbers]
print(result)
Drag options to blanks, or click blank then click option'
A==
B<
C>
D!=
Attempts:
3 left
💡 Hint
Common Mistakes
Using '<' will keep negative numbers instead of replacing them.
Using '==' or '!=' will not correctly filter positive numbers.
4fill in blank
hard

Fill both blanks to create a list that squares even numbers and cubes odd numbers from 1 to 5.

Python
result = [x[1]2 if x [2] 2 == 0 else x**3 for x in range(1, 6)]
print(result)
Drag options to blanks, or click blank then click option'
A**
B*
C%
D+
Attempts:
3 left
💡 Hint
Common Mistakes
Using '*' instead of '**' will multiply but not square.
Using '+' instead of '%' will not check evenness.
5fill in blank
hard

Fill both blanks to create a list of strings labeling numbers as 'small', 'medium', or 'large' based on their value.

Python
sizes = ['small' if x [1] 3 else 'medium' if x [2] 6 else 'large' for x in range(1, 10)]
print(sizes)
Drag options to blanks, or click blank then click option'
A<=
B<
C>
D>=
Attempts:
3 left
💡 Hint
Common Mistakes
Using '<=' instead of '<' changes the boundary conditions.
Using '>' or '>=' instead of '<' will misclassify numbers.

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