Вот приёмы, которые реально стоит добавить в свой арсенал 👇
1️⃣ Условие не только в конце
Обычно comprehension используют как фильтр, но
if может стоять и в начале — тогда это уже замена значения:
# фильтр — оставляем только чётные
[x for x in nums if x % 2 == 0]
# замена — нечётные превращаем в 0
[x if x % 2 == 0 else 0 for x in nums]
📌 Разница только в позиции
if, но смысл полностью меняется.2️⃣ Flatten — развернуть список списков
matrix = [[1,2,3],[4,5,6],[7,8,9]]
flat = [x for row in matrix for x in row]
👉 читается как обычный цикл: «для каждой строки → для каждого элемента»
3️⃣ Dict и set comprehensions
# инверсия словаря
d = {'a': 1, 'b': 2}
inv = {v: k for k, v in d.items()}
# уникальные домены
emails = ['a@gmail.com', 'b@yandex.ru', 'c@gmail.com']
domains = {e.split('@')[1] for e in emails}
4️⃣ Генератор вместо списка (когда данных много)
# список — всё в памяти
total = sum([x**2 for x in range(10_000_000)])
# генератор — ленивые вычисления
total = sum(x**2 for x in range(10_000_000))
⚡ Вторая версия экономит память в разы — критично для больших данных.
5️⃣ Walrus-оператор := внутри comprehension
results = [
y for x in data
if (y := heavy_function(x)) > 0
]
👉 значение считается один раз и сразу используется в условии.
💬 Какой приём был для вас новым?
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека питониста
#буст