CodeNebula
Python🔧Core Languagebeginner

Comprehensions

Python · Core Language · Run with python3

Explanation

Python has four comprehension forms: list `[expr for x in it if cond]`, dict `{k: v for ...}`, set `{expr for ...}`, and generator `(expr for ...)`. Comprehensions are faster than equivalent `for` loops (the loop variable is local, avoiding global lookup) and more readable. Nested comprehensions are legal but keep nesting shallow — beyond two levels, a named generator is clearer.

Real-World Scenario

Inverting a mapping (swapping keys and values) with a dict comprehension: `{v: k for k, v in mapping.items()}`. Flattening a 2D matrix into a 1D list: `[cell for row in matrix for cell in row]` — the order matches reading the nested loop left-to-right. ```python # List, dict, set, generator comprehensions matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flat = [x for row in matrix for x in row] evens = {x for x in flat if x % 2 == 0} sq_map = {x: x**2 for x in range(1, 6)} gen = (x**3 for x in range(1, 6)) # lazy print(flat) # [1, 2, 3, 4, 5, 6, 7, 8, 9] print(evens) # {2, 4, 6, 8} print(sq_map) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25} print(list(gen)) # [1, 8, 27, 64, 125] ```

Quick Snippet

snippet.py
# List, dict, set, generator comprehensions
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat   = [x for row in matrix for x in row]
evens  = {x for x in flat if x % 2 == 0}
sq_map = {x: x**2 for x in range(1, 6)}
gen    = (x**3 for x in range(1, 6))  # lazy

print(flat)              # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(evens)             # {2, 4, 6, 8}
print(sq_map)            # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
print(list(gen))         # [1, 8, 27, 64, 125]

Full Example

comprehensions.py
# Compile: python3 comprehensions.py
# Output:
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
# {2, 4, 6, 8}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# [1, 8, 27, 64, 125]

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat   = [x for row in matrix for x in row]
evens  = {x for x in flat if x % 2 == 0}
sq_map = {x: x**2 for x in range(1, 6)}
gen    = (x**3 for x in range(1, 6))

print(flat)
print(evens)
print(sq_map)
print(list(gen))

# Transpose a matrix using comprehension
transposed = [[row[i] for row in matrix] for i in range(3)]
print(transposed)

# Invert a dict
original = {"a": 1, "b": 2, "c": 3}
inverted = {v: k for k, v in original.items()}
print(inverted)
Run command
python3 comprehensions.py