Базовый синтаксис
Время: 5-10 мин
list
tuple
comprehensions
sort
lambda
Списки, кортежи и List Comprehensions
Тема: Генераторы списков, сортировки sort(key=...), срезы, min, max, sum
Списки — основная структура данных для обработки последовательностей чисел, пар, троек и результатов динамического программирования.
1. Генераторы списков (List Comprehensions)
Синтаксис: [выражение for элемент in коллекция if условие]
# Обычный цикл:
squares = []
for x in range(10):
if x % 2 == 0:
squares.append(x**2)
# Эквивалентный List Comprehension в 1 строку:
squares = [x**2 for x in range(10) if x % 2 == 0]
2. Сортировка сложных структур (Задание 26 ЕГЭ)
В Задании 26 часто требуется отсортировать пары (например, номер ряда и номер места):
- По возрастанию первого элемента и по убыванию второго элемента:
points.sort(key=lambda item: (item[0], -item[1]))
Разновидности и прототипы задания на экзамене
1. Генераторы списков (List Comprehensions)
Создание и фильтрация списков в одну строку
[x for x in data if cond].2. Сортировка списков и кортежей
Сортировка по нескольким критериям через
sort(key=lambda x: (x[0], -x[1])) (Задание 26 ЕГЭ).3. Агрегатные функции: min, max, sum, len, any, all
Мгновенные вычисления по коллекциям.
4. Двумерные массивы и таблицы
Создание матрицы
[[0]*M for _ in range(N)].Боевой шаблон решения на Python
Запустить код в онлайн-песочницеБоевой шаблон решения на Python
# === Шпаргалка: Списки и генераторы на практике ===
# 1. Чтение файла в список целых чисел (Задание 17):
# with open('17.txt') as f:
# nums = [int(x) for x in f]
# 2. Фильтрация и поиск:
nums = [15, 24, 30, 47, 52, 60, 71]
# Все четные числа, оканчивающиеся на 0:
evens = [x for x in nums if x % 10 == 0]
print("Числа с 0 на конце:", evens)
# 3. Сортировка пар с кастомным ключом (Задание 26):
events = [(10, 25), (5, 30), (10, 15), (5, 10)]
# Сортируем: сначала по началу (по возрастанию), затем по концу (по возрастанию):
events.sort(key=lambda x: (x[0], x[1]))
print("Отсортированные события:", events)
# 4. Создание двумерного массива NxM для динамики:
N, M = 5, 5
dp = [[0] * M for _ in range(N)]
Типичные ошибки
✕ Не так
# ❌ Ошибка создания матрицы: dp = [[0] * M] * N
# Все строки матрицы станут ссылками на ОДИН и тот же список!
dp = [[0]*3]*3
dp[0][0] = 99
print(dp) # [[99, 0, 0], [99, 0, 0], [99, 0, 0]] — испорчены все строки!
✓ Так
# ✅ Правильно: Использовать генератор списка:
dp = [[0] * 3 for _ in range(3)]
ГРОБ
ЛОВУШКА: Удаление элементов из списка во время итерации по нему
for x in a: if cond: a.remove(x) пропустит соседние элементы из-за сдвига индексов.
Как обойти
Всегда фильтруйте список через генератор:
a = [x for x in a if not cond].Лайфхаки на экзамене
- Функция
all([c1, c2, c3])возвращает True, если ВСЕ условия истинны. - Функция
any([c1, c2, c3])возвращает True, если ХОТЯ БЫ ОДНО условие истинно.