🐍 Python - Comprehensions
Comprehensions
Updated at 2018-06-09 17:55
Use list comprehensions [value].
squares = [number * number for number in range(5)]
assert squares == [0, 1, 4, 9, 16]
even_squares = [number * number for number in range(5) if number % 2 == 0]
assert even_squares == [0, 4, 16]
Use set comprehensions {value}.
squares = {number * number for number in range(5)}
assert squares == {0, 1, 4, 9, 16}
Use dictionary comprehensions {key: value}.
squares = {number: number * number for number in range(5)}
assert squares == {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
Use generator expressions (value).
for x in ('Hello' for _ in range(3)):
assert x == 'Hello'
Comprehensions and generator expressions can be nested. But avoid nesting comprehensions or expressions for more than 2 levels. Nesting can cause the code to become difficult to maintain.
colors = ['black', 'white']
sizes = ['S', 'M', 'L']
shirts = [(color, size) for color in colors
for size in sizes]
assert len(shirts) == 6
assert shirts[0] == ('black', 'S')
jackets = ((color, size) for color in colors
for size in sizes)
for jacket in jackets:
assert isinstance(jacket, tuple)
from typing import NamedTuple
class Product(NamedTuple):
name: str
price: int
products = [
Product(name='Apple', price=1),
Product(name='Cookie', price=2),
Product(name='Ground Coffee', price=3),
]
total = sum((
product.price
for product
in products
), 0)
assert total == 6
Source
- Python Tricks The Book, Dan Bader
- Fluent Python, Luciano Ramalho