Списковые включения (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]
Когда это уместно
Списковое включение хорошо для простых преобразований и фильтров — оно читается как одна мысль. Но если логика сложная, с несколькими условиями и действиями, обычный цикл понятнее. Читаемость важнее краткости.
Частые вопросы
Быстрее ли включение обычного цикла? Обычно чуть быстрее и всегда короче.
Есть ли такое для словарей? Да, аналогично работают включения для словарей и множеств.
Начать игру бесплатно