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

[x for x in ... if ...]

⏱ ~12 мин чтения· 📗 Средний

Базовый синтаксис

Списочное выражение (list comprehension) — компактный способ создания списков:

# Обычный цикл
squares = []
for x in range(5):
    squares.append(x**2)

# То же через list comprehension
squares = [x**2 for x in range(5)]
print(squares)  # [0, 1, 4, 9, 16]

С условием (if)

Можно добавить фильтрацию:

# Только чётные числа
evens = [x for x in range(10) if x % 2 == 0]
print(evens)  # [0, 2, 4, 6, 8]

# Квадраты только нечётных
odd_squares = [x**2 for x in range(10) if x % 2 != 0]
print(odd_squares)  # [1, 9, 25, 49, 81]

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

Можно использовать несколько for:

# Матрица 3x3
matrix = [[i * 3 + j for j in range(3)] for i in range(3)]
print(matrix)  # [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

# "Сплющивание" матрицы
flat = [num for row in matrix for num in row]
print(flat)  # [0, 1, 2, 3, 4, 5, 6, 7, 8]

Словарные выражения

Аналогично для словарей:

# Словарь квадратов
squares_dict = {x: x**2 for x in range(5)}
print(squares_dict)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# Фильтрация словаря
original = {"a": 1, "b": 2, "c": 3, "d": 4}
filtered = {k: v for k, v in original.items() if v > 2}
print(filtered)  # {"c": 3, "d": 4}