Списки, кортежи и List Comprehensions в Python для ЕГЭ/ОГЭ: шпаргалка и примеры | СмартКИМ
СмартКИМ УДОБНАЯ ПОДГОТОВКА К ЕГЭ И ОГЭ
Все разборы Решать в тренажере Войти в СмартКИМ
ЕГЭ (1–27) ОГЭ (1–15) Python: шпаргалка
Быстрый переход по номерам и темам
Базовый синтаксис Время: 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].

Лайфхаки на экзамене

  1. Функция all([c1, c2, c3]) возвращает True, если ВСЕ условия истинны.
  2. Функция any([c1, c2, c3]) возвращает True, если ХОТЯ БЫ ОДНО условие истинно.
Все разборы заданий Открыть в тренажере СмартКИМ