List Comprehension
Concise syntax for building lists from iterables with optional filtering
Overview
List comprehensions let you create lists in a single readable expression. They replace many for loops plus append patterns and often run faster because the loop runs in optimized C code inside the interpreter.
Syntax / Usage
# Basic form: [expression for item in iterable]
squares = [x ** 2 for x in range(6)]
# [0, 1, 4, 9, 16, 25]
# With filter: [expression for item in iterable if condition]
evens = [n for n in range(10) if n % 2 == 0]
# [0, 2, 4, 6, 8]
# Nested loops
pairs = [(x, y) for x in range(3) for y in range(2)]
# [(0,0), (0,1), (1,0), (1,1), (2,0), (2,1)]
# With transformation
names = ["ada", "guido"]
capitalized = [n.title() for n in names]
Dictionary and set comprehensions use similar syntax: {k: v for ...} and {x for ...}.
Examples
Extract active user emails from a list of dicts:
users = [
{"email": "a@x.com", "active": True},
{"email": "b@x.com", "active": False},
]
active_emails = [u["email"] for u in users if u["active"]]
Flatten a matrix:
matrix = [[1, 2], [3, 4], [5, 6]]
flat = [cell for row in matrix for cell in row]
# [1, 2, 3, 4, 5, 6]
Common Mistakes
- Building side effects inside comprehensions (prefer a plain loop for I/O)
- Nesting too many levels—readability suffers past two loops
- Using comprehensions when a generator expression would save memory on huge data
- Forgetting that the
ifclause filters;if/elsein the expression is for mapping
See Also
python-loops python-functions python-generators