Списочные выражения

Слайд 1

🧮 Списочные выражения (List Comprehensions)

Списочные выражения — это удобный способ создавать списки без явного использования цикла for и метода append(). Они позволяют писать короткий и читаемый код.

🔹 Обычное создание списка

zeros = []
for i in range(10):
    zeros.append(0)

Такой код создаёт список из десяти нулей. Но есть более короткий вариант:

zeros = [0] * 10

А если нужны последовательные числа:

numbers = []
for i in range(10):
    numbers.append(i)

Можно заменить одной строкой 👇

numbers = [i for i in range(10)]

🔹 Общий синтаксис

[выражение for переменная in последовательность]
  • переменная — принимает значения из последовательности;
  • последовательность — список, строка или диапазон (range);
  • выражение — определяет, что попадёт в итоговый список.

🔹 Примеры

# 10 нулей
zeros = [0 for i in range(10)]

# квадраты чисел от 0 до 9
squares = [i ** 2 for i in range(10)]

# кубы чисел от 10 до 20
cubes = [i ** 3 for i in range(10, 21)]

# символы строки
chars = [c for c in 'abcdefg']
print(chars)
# ['a', 'b', 'c', 'd', 'e', 'f', 'g']

🔹 Списочные выражения и ввод данных

С помощью списочного выражения можно быстро считать несколько строк:

n = int(input())
lines = [input() for _ in range(n)]

или даже короче:

lines = [input() for _ in range(int(input()))]

Для чисел:

numbers = [int(input()) for _ in range(int(input()))]
💡 Символ подчёркивания _ используется, если переменная цикла не нужна.

🔹 Условие внутри списочного выражения

Можно добавить фильтрацию с помощью if:

evens = [i for i in range(21) if i % 2 == 0]

Этот код создаёт список чётных чисел от 0 до 20. Однако проще и эффективнее использовать range(0, 21, 2).

🔹 Вложенные циклы

Списочные выражения могут содержать вложенные циклы:

numbers = [i * j for i in range(1, 5) for j in range(2)]
print(numbers)
# [0, 1, 0, 2, 0, 3, 0, 4]

Эквивалентно следующему коду:

numbers = []
for i in range(1, 5):
    for j in range(2):
        numbers.append(i * j)

🔹 Примеры и результаты

Списочное выражение Результат
[0 for i in range(10)] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[i ** 2 for i in range(1, 8)] [1, 4, 9, 16, 25, 36, 49]
[i * 10 for i in numbers] [10, 140, 50, 90, 120]
[c * 2 for c in word] ['HH', 'ee', 'll', 'll', 'oo']
[m[0] for m in words] ['o', 't', 't', 'f', 'f', 's']
[i for i in numbers if i < 10] [1, 5, 9]
[m[0] for m in words if len(m) == 3] ['o', 't', 's']
✅ Списочные выражения позволяют создавать списки коротко, читабельно и эффективно — без лишнего кода и вызова append().