All chapters in this track
- 011. Variables, Types & Operators
- 022. Strings
- 033. Lists
- 044. Tuples, Sets & Dicts
- 055. Control Flow
- 066. Error Handling
- 077. Functions & Lambdas
- 088. Comprehensions
- 099. Built-in Functions
- 1010. Type Hints (3.10+)
- 1111. Classes & Dataclasses
- 1212. Iterators & Generators
- 1313. DSA Standard Library
- 1414. Python 3.9–3.11 Features for DSA
- 1515. DSA Idioms & Gotchas
- 1616. Master Quick Reference
Chapter 8 of 16
8. Comprehensions
Tutorial
Comprehensions are Python's most expressive feature — faster than equivalent for loops and DSA-critical for building grids, frequency tables, and coordinate-compressed arrays.
# ══ LIST COMPREHENSION ═════════════════════════════════════════
squares = [x**2 for x in range(6)]
evens = [x for x in range(10) if x % 2 == 0]
doubled = [x * 2 for x in nums]
filtered = [x if x > 0 else 0 for x in nums] # conditional output
# Nested: flatten 2D
flat = [x for row in matrix for x in row]
# Build grid
grid = [[0] * cols for _ in range(rows)]
# ══ DICT COMPREHENSION ═════════════════════════════════════════
sq_map = {x: x**2 for x in range(5)}
inverted = {v: k for k, v in d.items()}
filtered = {k: v for k, v in d.items() if v > 1}
# Coordinate compression (DSA essential)
vals = [30, 10, 50, 10, 20]
rank = {v: i for i, v in enumerate(sorted(set(vals)))}
compressed = [rank[v] for v in vals] # [2, 0, 3, 0, 1]
# Build index map
idx_map = {v: i for i, v in enumerate(arr)} # value → index
# ══ SET COMPREHENSION ══════════════════════════════════════════
unique_lens = {len(w) for w in words}
seen_chars = {c.lower() for c in s if c.isalpha()}
# ══ GENERATOR EXPRESSIONS ══════════════════════════════════════
# Like list comprehension but lazy — no intermediate list in memory
total = sum(x**2 for x in range(10**6))
has_neg = any(x < 0 for x in nums)
all_pos = all(x > 0 for x in nums)
max_len = max(len(w) for w in words)
Reference
| Type | Syntax | Returns |
|---|---|---|
| List | [expr for x in it if cond] | list |
| Dict | {k:v for x in it if cond} | dict |
| Set | {expr for x in it if cond} | set |
| Generator | (expr for x in it if cond) | lazy iterator |
| Nested flatten | [x for row in mat for x in row] | list |
| 2D grid | [[0]*c for _ in range(r)] | list[list] |
| Conditional output | [a if cond else b for x in it] | list |
| Coord compress | {v:i for i,v in enumerate(sorted(set(arr)))} | dict |