Слайд 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().