Bird
Raised Fist0
Pythonprogramming~20 mins

List comprehension with condition 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 filtering even numbers
What is the output of this Python code?
nums = [1, 2, 3, 4, 5]
even_nums = [x for x in nums if x % 2 == 0]
print(even_nums)
Python
nums = [1, 2, 3, 4, 5]
even_nums = [x for x in nums if x % 2 == 0]
print(even_nums)
A[2, 4]
B[1, 3, 5]
C[1, 2, 3, 4, 5]
D[]
Attempts:
2 left
๐Ÿ’ก Hint
Remember, the condition filters only numbers divisible by 2.
โ“ Predict Output
intermediate
2:00remaining
List comprehension with else clause output
What is the output of this code?
nums = [1, 2, 3]
result = [x if x % 2 == 0 else 0 for x in nums]
print(result)
Python
nums = [1, 2, 3]
result = [x if x % 2 == 0 else 0 for x in nums]
print(result)
A[0, 2, 0]
B[1, 2, 3]
C[1, 0, 3]
D[2]
Attempts:
2 left
๐Ÿ’ก Hint
The else part replaces odd numbers with 0.
โ“ Predict Output
advanced
2:30remaining
Output of nested list comprehension with condition
What does this code print?
matrix = [[1, 2], [3, 4], [5, 6]]
result = [x for row in matrix for x in row if x % 2 == 0]
print(result)
Python
matrix = [[1, 2], [3, 4], [5, 6]]
result = [x for row in matrix for x in row if x % 2 == 0]
print(result)
A[1, 2, 3, 4, 5, 6]
B[1, 3, 5]
C[2, 4, 6]
D[2, 4]
Attempts:
2 left
๐Ÿ’ก Hint
It flattens the matrix and keeps only even numbers.
โ“ Predict Output
advanced
2:30remaining
Output of list comprehension with multiple conditions
What is printed by this code?
nums = range(10)
result = [x*x for x in nums if x % 2 == 0 and x > 5]
print(result)
Python
nums = range(10)
result = [x*x for x in nums if x % 2 == 0 and x > 5]
print(result)
A[25, 36, 49, 64, 81]
B[0, 4, 16, 36, 64]
C[6, 8]
D[36, 64]
Attempts:
2 left
๐Ÿ’ก Hint
Filter numbers that are even and greater than 5, then square them.
๐Ÿง  Conceptual
expert
3:00remaining
Understanding evaluation order in list comprehension with condition
Consider this code:
values = [0, 1, 2, 3]
result = [10 / x for x in values if x != 0]
print(result)

Which statement is true about this code?
AIt raises a ZeroDivisionError because 0 is in values.
BIt prints [10.0, 5.0, 3.3333333333333335] without error.
CIt prints [10, 5, 3] because division returns integers.
DIt raises a SyntaxError due to the condition placement.
Attempts:
2 left
๐Ÿ’ก Hint
The condition filters out zero before division happens.

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