List comprehension (списковое включение) — генератор списков. Это одна из самых приятных вещей в python, научившись писать которую, будешь применять её везде.
Функциональность list comprehension предоставляет более краткий и лаконичный синтаксис для создания списков на основе других наборов данных. Она имеет следующий синтаксис:
Синтаксис list comprehension состоит из следующих компонентов:
- iterable: перебираемый источник данных, в качестве которого может выступать список, множество, последовательность, либо даже функция, которая возвращает набор данных, например, range()
- item: извлекаемый из источника данных элемент
- expression: выражение, которое возвращает некоторое значение. Это значение затем попадает в генерируемый список
- condition: условие, которому должны соответствовать извлекаемые из источника данных элементы. Если элемент НЕ удовлетворяет условию, то он НЕ выбирается. Необязательный параметр.
Пожалуй Вы точно видели записи такого вида:
Это и есть генератор списка. Что здесь происходит? Это обычный цикл for, только записан в более читаемом виде. В развёрнутом виде это выглядело бы так:
Вот тут и видна разница в этих записях — генератор списка условно можно назвать синтаксическим сахаром для цикла for, но у них разное время выполнения. Под капотом генератор списка также использует цикл for но выигрывает по скорости из-за того, то не вызывает метод append у списка (подробности здесь).