Published on: 2023-05-29
📝 Introduction
If you’ve written Python code for even a short while, you’ve likely encountered the classic for loop. While powerful and readable, Python offers a more concise, elegant way to achieve the same result: list comprehensions.
List comprehensions are not just syntactic sugar — they’re a Pythonic way to write code that’s faster, cleaner, and often easier to understand once you’re familiar with the format.
🧠 What is a List Comprehension?
A list comprehension is a compact way to create lists. Instead of writing multiple lines with a loop and an append() call, you can express the logic in a single line.
📝 Basic Syntax:
[expression for item in iterable]
This reads almost like English: “Give me expression for each item in the iterable.”
🔢 Example: Squares of Numbers
squares = [x ** 2 for x in range(10)]
print(squares)
# Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Instead of:
squares = []
for x in range(10):
squares.append(x ** 2)
⚙️ Adding Conditions
List comprehensions also support conditional logic.
✅ Example: Even Numbers Only
evens = [x for x in range(20) if x % 2 == 0]
print(evens)
# Output: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
🤔 Example: Using if...else in Expression
You can include a conditional expression, but it must be in the front of the comprehension:
labels = ["even" if x % 2 == 0 else "odd" for x in range(5)]
print(labels)
# Output: ['even', 'odd', 'even', 'odd', 'even']
🔄 Nested Loops in List Comprehensions
You can nest for loops inside list comprehensions for flattening lists or generating combinations.
🧮 Example: Cartesian Product
pairs = [(x, y) for x in [1, 2] for y in ['a', 'b']]
print(pairs)
# Output: [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
This is equivalent to:
pairs = []
for x in [1, 2]:
for y in ['a', 'b']:
pairs.append((x, y))
⚠️ When Not to Use List Comprehensions
While list comprehensions are powerful, they shouldn’t be abused. If the logic is too complex, it might harm readability. When you find yourself adding nested loops and multiple conditions, consider switching back to regular for loops.
Rule of thumb: If it takes more than two seconds to understand what’s happening, use a for loop.
🔁 List Comprehension vs. Generator Expression
If you’re only iterating once and don’t need to store the whole list in memory, consider using a generator expression — it uses parentheses instead of square brackets:
squares = (x ** 2 for x in range(10))
This is more memory-efficient, especially with large data sets.
🧾 Summary
List comprehensions are one of those features that make Python enjoyable to write and read. They’re not just about writing less code — they’re about expressing ideas clearly and efficiently.
If you’re new to them, start small. Rewrite a few for loops as list comprehensions. Over time, they’ll become second nature — and your code will look all the better for it.