Python comprehensions are a concise way to generate sequences like lists, dictionaries, and sets. When combined with conditional logic, comprehensions become even more powerful, allowing you to filter or transform data in a single, readable line of code. These are known as conditional comprehensions.
In this post, we’ll explore the different types of conditional comprehensions in Python with practical examples to help you understand how and when to use them effectively.
1. What Are Conditional Comprehensions?
Conditional comprehensions allow you to include if
and if-else
logic directly inside list, set, or dictionary comprehensions. This is useful when you want to:
- Filter elements based on a condition
- Apply conditional transformation to elements
- Create compact, readable one-liners for common tasks
2. List Comprehensions with if
This filters elements based on a condition.
Example 1: Filter Even Numbers
numbers = [1, 2, 3, 4, 5, 6]
evens = [x for x in numbers if x % 2 == 0]
print(evens) # Output: [2, 4, 6]
Example 2: Filter Words with Length Greater Than 3
words = ["hi", "hello", "hey", "Python"]
long_words = [w for w in words if len(w) > 3]
print(long_words) # Output: ['hello', 'Python']
3. List Comprehensions with if-else
This transforms elements conditionally.
Example 3: Mark Even/Odd
labels = ["even" if x % 2 == 0 else "odd" for x in range(5)]
print(labels) # Output: ['even', 'odd', 'even', 'odd', 'even']
Example 4: Replace Negatives with Zero
nums = [1, -2, 3, -4, 5]
cleaned = [x if x > 0 else 0 for x in nums]
print(cleaned) # Output: [1, 0, 3, 0, 5]
4. Dictionary Comprehensions with Conditions
Example 5: Filter Students Who Passed
marks = {"Alice": 85, "Bob": 42, "Charlie": 67}
passed = {k: v for k, v in marks.items() if v >= 50}
print(passed) # Output: {'Alice': 85, 'Charlie': 67}
Example 6: Conditional Assignment in Dictionary
status = {k: ("Pass" if v >= 50 else "Fail") for k, v in marks.items()}
print(status) # Output: {'Alice': 'Pass', 'Bob': 'Fail', 'Charlie': 'Pass'}
5. Set Comprehensions with Conditions
Example 7: Unique Squares of Even Numbers
squares = {x**2 for x in range(10) if x % 2 == 0}
print(squares) # Output: {0, 4, 16, 36, 64}
6. Real-World Use Cases
- Data cleaning: Replacing or removing invalid values
- Filtering: Creating new datasets based on conditions
- Transformation: Labeling or adjusting values dynamically
7. Summary Table
Type | Syntax | Use Case |
---|---|---|
List (if) | [x for x in data if condition] |
Filter elements |
List (if-else) | [x if condition else y for x in data] |
Transform elements |
Dict (if) | {k: v for k, v in items if condition} |
Filter key-value pairs |
Dict (if-else) | {k: val if condition else alt for k, v in items} |
Conditional assignment |
8. Final Thoughts
Conditional comprehensions allow you to write clean, Pythonic code that performs both filtering and transformation in a single line. They're a great tool for developers looking to write readable and efficient data-processing logic. Just be sure to keep them simple—if the logic becomes too complex, consider breaking it into a regular loop for better readability.