Включения и обработка коллекций
Что это и зачем
Comprehension описывает создание новой коллекции через выражение, перебор и необязательный фильтр. Это компактная запись преобразования данных.
Как это работает
[expr for item in iterable if condition] сначала перебирает элементы, затем фильтрует и вычисляет выражение. {key: value for ...} создаёт dict; {expr for ...} — set. Круглые скобки создают ленивый generator expression.
print([n * n for n in range(4)])
Когда применять
Применяйте включения для короткого чистого преобразования и фильтрации. sum и any могут потреблять генератор без промежуточного списка. Читаемость важнее минимального числа строк.
Границы применения
Не вызывайте функции с побочными эффектами во включении ради краткости. Не помещайте несколько сложных условий и циклов в одну строку: явный цикл проще отлаживать. Генератор расходуется при чтении.
Ошибки и лучшие практики
Фильтр if в конце отличается от условного выражения в начале. Повторяющиеся ключи dict заменяются последним значением. Переменная включения не протекает во внешнюю область.
Понятна идея? Теперь проверим её в действии.