Comprehensions
List/dict/set comprehensions — питоничные однострочники.
List, dict, set comprehensions
Что это
Comprehension — короткий синтаксис, который собирает list/dict/set из последовательности за один проход. Заменяет цикл с append/d[k]=v/add в одну строку и читается ближе к декларативному «что хочу», а не «как делаю».
Как читается
squares = [x*x for x in range(10) if x % 2 == 0]
name_to_len = {n: len(n) for n in ["a", "abc"]}
uniq = {x % 3 for x in range(10)}
- [выражение for элемент in источник if условие] — общая форма.
- Скобки решают тип: [] → list, {} → set/dict (с : — dict), () → генератор, не tuple.
- Условие if фильтрует элементы. Без него берутся все.
Пример
users = [{"name": "Anna", "age": 30}, {"name": "Bob", "age": 17}]
adults = [u["name"] for u in users if u["age"] >= 18]
print(adults) # ['Anna']
by_age = {u["name"]: u["age"] for u in users}
print(by_age) # {'Anna': 30, 'Bob': 17}
Когда использовать / подводные камни
👍 Идеально для трансформации одного списка в другой.
👎 Не вкладывай два-три уровня — [[x for x in row] for row in m if ...] быстро превращается в кашу. Лучше обычный for. И не пиши comprehension ради побочного эффекта ([print(x) for x in ...]) — это анти-паттерн.