Bird
Raised Fist0
Pythonprogramming~5 mins

List comprehension with if–else in Python

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
Introduction

List comprehension with if-else lets you create a new list by choosing values based on a condition, all in one simple line.

You want to change numbers in a list to 'even' or 'odd' labels.
You need to replace negative numbers with zero but keep positives as they are.
You want to mark students as 'pass' or 'fail' based on their scores.
You want to create a list of prices with a discount applied only to expensive items.
Syntax
Python
new_list = [value_if_true if condition else value_if_false for item in original_list]

The if-else part goes before the for loop in the list comprehension.

This is different from a simple if filter, which comes after the for loop.

Examples
Labels each number as 'even' or 'odd'.
Python
numbers = [1, 2, 3, 4]
labels = ['even' if num % 2 == 0 else 'odd' for num in numbers]
print(labels)
Replaces negative temperatures with zero.
Python
temps = [-5, 3, 0, -1]
non_negative = [temp if temp >= 0 else 0 for temp in temps]
print(non_negative)
Marks scores as 'pass' or 'fail'.
Python
scores = [55, 70, 40]
results = ['pass' if score >= 50 else 'fail' for score in scores]
print(results)
Applies 10% discount only to prices over 100.
Python
prices = [100, 250, 50]
discounted = [price * 0.9 if price > 100 else price for price in prices]
print(discounted)
Sample Program

This program labels each number in the list as 'even' or 'odd' using list comprehension with if-else.

Python
def label_numbers(numbers):
    print(f"Original numbers: {numbers}")
    labeled = ['even' if number % 2 == 0 else 'odd' for number in numbers]
    print(f"Labeled numbers: {labeled}")

numbers_list = [10, 15, 22, 33, 40]
label_numbers(numbers_list)
OutputSuccess
Important Notes

Time complexity is O(n) because it processes each item once.

Space complexity is O(n) since it creates a new list of the same size.

A common mistake is putting the if-else after the for loop, which causes syntax errors.

Use this when you want to choose between two values for each item. Use a simple if filter if you want to include or exclude items.

Summary

List comprehension with if-else lets you pick one of two values for each item based on a condition.

The if-else goes before the for loop inside the brackets.

This makes your code shorter and easier to read when transforming lists.

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