Python: массивы и списки: разбор для ЕГЭ
Если «Python: массивы и списки» кажется тёмным лесом — это нормально: тема собрана из нескольких простых идей. Покажем их по порядку, разберём пример и предупредим о ловушках экзамена.
Зачем нужны списки в Python и как они устроены в ЕГЭ
Школьники часто теряют первичные баллы в номерах 17, 24, 25, 26 и 27 только из-за неумения быстро и чисто обрабатывать числовые последовательности. В этом руководстве мы разберем работу со списками в Python от базового синтаксиса до практических приемов ЕГЭ, чтобы ты научился уверенно писать безошибочный код.
В кодификаторе ЕГЭ термин «массив» обозначает упорядоченную последовательность элементов фиксированного или переменного размера. В языке Python классических массивов нет: вместо них используется встроенный тип данных list (список). Список представляет собой динамический массив ссылок на объекты в памяти. Это значит, что длина списка может свободно увеличиваться и уменьшаться во время работы программы, а внутри одной структуры разрешено хранить числа, строки и даже другие списки.
Нумерация элементов в Python всегда начинается с нуля. Первый элемент списка a имеет индекс 0, второй — 1, а последний — len(a) - 1. Если ты хочешь сразу проверить свое понимание теории на реальных тестах, загляни в бесплатный личный кабинет Просто Урок, где собраны тематические подборки задач.
Главные методы списков: шпаргалка для экзамена
Для успешного решения задач второй части достаточно уверенно владеть десятком встроенных функций и методов. Они позволяют быстро фильтровать последовательности, находить экстремумы и выполнять сортировку без ручного написания сложных алгоритмов.
| Операция / Метод | Что делает | Пример использования |
|---|---|---|
len(a) |
Возвращает количество элементов | len([3, 7, 2]) → 3 |
append(x) |
Добавляет элемент x в конец списка |
a.append(10) |
sort(reverse=False) |
Сортирует список на месте по возрастанию | a.sort() |
count(x) |
Считает, сколько раз значение x встречается в списке |
a.count(0) |
sum(a), min(a), max(a) |
Считает сумму, минимум или максимум числового списка | sum(a) / len(a) |
При чтении чисел из файла в заданиях 17 и 24 используй списочные выражения (генераторы). Конструкция a = [int(x) for x in open('17.txt')] считывает весь файл в список целых чисел за одну строчку кода, экономя твое время на экзамене.
Срезы и отрицательные индексы без ошибок
Срезы позволяют извлекать любую непрерывную подпоследовательность или переворачивать список в одно действие. Общий синтаксис среза выглядит так: список[старт:стоп:шаг]. При этом правая граница стоп никогда не включается в результирующий срез.
Отрицательная индексация идет с конца: индекс -1 указывает на последний элемент, -2 — на предпоследний. Шаг среза определяет направление и частоту выборки.
\( a = [10, 20, 30, 40, 50, 60] \)
a[1:4] → [20, 30, 40] (элементы с индексами 1, 2, 3)
a[:3] → [10, 20, 30] (первые три элемента)
a[-2:] → [50, 60] (последние два элемента)
a[::-1] → [60, 50, 40, 30, 20, 10] (разворот списка)
Срезы создают новый независимый объект в памяти. Это свойство часто используют для безопасного копирования данных перед преобразованием.
Типичные ловушки: ссылки, копирование и циклы
В Python переменная списка хранит не сами значения, а ссылку на область памяти. Простое присваивание b = a не создает дубликат: обе переменные начинают указывать на один и тот же список. Изменение b[0] автоматически изменит и a[0].
Никогда не удаляй элементы из списка прямо во время прохода по нему циклом for x in a. При вызове a.remove(x) индексы оставшихся элементов смещаются влево, и цикл неизбежно пропустит следующий за удаленным элемент. Для корректной фильтрации создавай новый список или применяй генератор.
Для создания полноценной копии одномерного списка применяй метод b = a.copy() или срез b = a[:]. Если требуется работать с двумерной таблицей (матрицей), используй модуль copy и функцию deepcopy(), иначе вложенные строки останутся связанными ссылками.
Разбор типовой задачи №17 из ЕГЭ
Рассмотрим стандартную задачу на обработку пар элементов. Условие: дан файл с последовательностью целых чисел от -10 000 до 10 000. Определи количество пар элементов, в которых хотя бы одно число делится на 3, а сумма элементов пары меньше максимального элемента всей последовательности, кратного 19. В ответе запиши количество таких пар и максимальную из их сумм.
Алгоритм решения по шагам:
1. Читаем все числа из файла в список: a = [int(x) for x in open('17.txt')]
2. Находим контрольное значение: max_19 = max(x for x in a if x % 19 == 0)
3. Создаем список для подходящих сумм: ans = []
4. Проходим по всем парам соседних элементов от 0 до len(a) - 2:
\( x, y = a[i], a[i + 1] \)
\( if (x \% 3 == 0 or y \% 3 == 0) and (x + y < max_19): \)
\( ans.append(x + y) \)
5. Выводим результат: print(len(ans), max(ans))
Такой подход гарантирует линейную сложность O(N) и отрабатывает менее чем за 0.1 секунды. Потренироваться в решении аналогичных прототипов ты можешь в тренажере Просто Урок.
Что запомнить для максимального балла
Списки в Python — это главный инструмент для сдачи ЕГЭ по информатике на 80+ баллов. Повторим ключевые правила перед экзаменом:
1. Индексация начинается с нуля, а диапазон соседних пар проверяется до len(a) - 1.
2. Списочные выражения заменяют громоздкие циклы и уменьшают вероятность синтаксической ошибки.
3. Встроенные функции min(), max(), sum() и len() работают быстрее рукописных алгоритмов.
4. Для клонирования списков используй a.copy(), чтобы избежать скрытой мутации данных.
Следующий шаг — переходи в личный кабинет и реши 5 тренировочных заданий по спискам бесплатно, чтобы закрепить материал на практике.
Частые вопросы
В чем разница между массивом и списком в Python?
Классический массив хранит элементы одного типа в непрерывном блоке памяти, а список в Python — это динамическая структура ссылок на произвольные объекты.
Чем метод a.sort() отличается от функции sorted(a)?
Метод a.sort() меняет исходный список на месте и возвращает None, а sorted(a) возвращает новый отсортированный список, не изменяя оригинал.
Как быстро заполнить двумерный список нулями?
Используй генератор [[0] * m for _ in range(n)]. Конструкция [[0] * m] * n создаст n ссылок на одну и ту же строку, что приведет к логической ошибке.
Как закрепить тему после разбора?
Авторизуйся в бесплатном личном кабинете «Просто Урок» и реши интерактивный тест по работе со списками с мгновенной проверкой ответов.
Проверь себя на реальных заданиях
После такого разбора решите 5–7 заданий подряд — и тема ваша. Тренажёр Просто Урок подберёт их автоматически, ошибки объяснит по шагам. Бесплатно, в браузере.