Vasu Patel logoVasu Patel
← Python Syntax & DSA Reference
All chapters in this track
  1. 011. Variables, Types & Operators
  2. 022. Strings
  3. 033. Lists
  4. 044. Tuples, Sets & Dicts
  5. 055. Control Flow
  6. 066. Error Handling
  7. 077. Functions & Lambdas
  8. 088. Comprehensions
  9. 099. Built-in Functions
  10. 1010. Type Hints (3.10+)
  11. 1111. Classes & Dataclasses
  12. 1212. Iterators & Generators
  13. 1313. DSA Standard Library
  14. 1414. Python 3.9–3.11 Features for DSA
  15. 1515. DSA Idioms & Gotchas
  16. 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

TypeSyntaxReturns
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