Списковые включения (list comprehension)

Списковое включение создаёт новый список одной короткой строкой вместо цикла с append.

Список одной строкой

Часто список собирают циклом: заводят пустой список и добавляют элементы через append. Списковое включение делает то же самое компактнее — прямо в квадратных скобках.

# было
squares = []
for n in range(5):
    squares.append(n * n)
# стало
squares = [n * n for n in range(5)]

С условием

В включение можно добавить условие if — тогда в новый список попадут только подходящие элементы. Это удобный способ отфильтровать данные.

nums = [1, 2, 3, 4, 5, 6]
even = [n for n in nums if n % 2 == 0]   # [2, 4, 6]

Когда это уместно

Списковое включение хорошо для простых преобразований и фильтров — оно читается как одна мысль. Но если логика сложная, с несколькими условиями и действиями, обычный цикл понятнее. Читаемость важнее краткости.

Частые вопросы

Быстрее ли включение обычного цикла? Обычно чуть быстрее и всегда короче.

Есть ли такое для словарей? Да, аналогично работают включения для словарей и множеств.

Начать игру бесплатно