Одномерные массивы (списки) в Python: подготовка к ЕГЭ с нуля
Тема одномерных массивов (в Python — списков) — одна из ключевых в ЕГЭ по информатике. Она встречается и в заданиях базового уровня (например, №9, №10), и в задачах повышенной сложности (№17, №22, №23). Умение работать со списками — база для решения любых алгоритмических задач.
В этой статье мы разберём все подразделы темы: создание и заполнение массива, перебор элементов, поиск минимума/максимума, суммы и среднего, а также линейный и бинарный поиск. Каждый раздел сопровождается примерами задач уровня ЕГЭ с полным решением.
Материал ориентирован на учеников 10-11 классов, которые готовятся к экзамену. Если вы только начинаете изучение Python, рекомендую сначала освоить основы: переменные, условный оператор, циклы. Однако даже новичок сможет разобраться — все примеры подробно прокомментированы.
Без карты, без кредитки. Выбери персонажа — учи голосом, побеждай в баттлах.
Создание и заполнение одномерного массива (списка)
В Python одномерный массив реализуется встроенным типом list. Список можно создать несколькими способами:
1. Пустой список: a = []
2. Список с элементами: a = [1, 2, 3]
3. Список из N элементов, заполненных нулями: a = [0] * N
4. Заполнение с клавиатуры: a = list(map(int, input().split()))
5. Заполнение случайными числами: import random; a = [random.randint(1, 100) for _ in range(N)]
На ЕГЭ часто требуется считать массив из строки ввода или сгенерировать его по правилу. Рассмотрим пример.
Задача 1 (аналог задания №9 ЕГЭ). На вход программе подаётся натуральное число N, а затем N целых чисел. Создайте список из этих чисел и выведите его в обратном порядке.
Пример ввода:
5
1 2 3 4 5
Вывод:
5 4 3 2 1
Шаг 1. Считываем N, затем N чисел.
N = int(input())
a = list(map(int, input().split()))
Шаг 2. Переворачиваем список: a[::-1] или reversed(a).
reversed_a = a[::-1]
Шаг 3. Выводим элементы через пробел.
print(*reversed_a)
Полный код:
N = int(input())
a = list(map(int, input().split()))
print(*a[::-1])
Перебор элементов массива и типовые операции
Перебор элементов — основа работы с массивами. В ЕГЭ чаще всего используются циклы for и while. Основные операции: поиск суммы, произведения, количества элементов по условию, поиск минимума и максимума.
Сумма элементов: sum(a) или ручной перебор.
Произведение: перебор с накоплением (начальное значение 1).
Количество элементов, удовлетворяющих условию: счётчик в цикле.
Рассмотрим задачу на сумму и количество.
Задача 2 (аналог задания №10 ЕГЭ). Дан список целых чисел. Найдите сумму положительных элементов и их количество. Если положительных элементов нет, выведите 0.
Пример:
Вход: -1 2 -3 4 -5
Выход: 6 2
Шаг 1. Считываем список.
a = list(map(int, input().split()))
Шаг 2. Инициализируем сумму и счётчик.
total = 0
count = 0
Шаг 3. Перебираем элементы, добавляем положительные к сумме и увеличиваем счётчик.
for x in a:
if x > 0:
total += x
count += 1
Шаг 4. Выводим результат.
print(total, count)
Если нужно вывести 0 при отсутствии положительных — это уже учтено, так как count останется 0, а total 0.
Поиск минимума, максимума, суммы и среднего
Встроенные функции min(), max(), sum(), len() упрощают жизнь, но на ЕГЭ могут попросить реализовать поиск вручную. Особенно это касается задач, где нужно найти не просто минимум, а, например, второй минимум или минимум среди элементов с определённым свойством.
Среднее арифметическое: sum(a) / len(a) (осторожно с целочисленным делением, если нужно вещественное).
Рассмотрим задачу на поиск минимума и максимума с ручным перебором.
Задача 3 (аналог задания №17 ЕГЭ). Дан список из N целых чисел. Найдите минимальный и максимальный элементы, а также их индексы (первое вхождение). Если минимальный и максимальный совпадают, выведите их индекс один раз.
Пример:
Вход: 3 1 4 1 5
Выход: min=1 index=1 max=5 index=4
Шаг 1. Считываем список.
a = list(map(int, input().split()))
Шаг 2. Инициализируем минимум и максимум первым элементом, индексы нулевыми.
min_val = a[0]
max_val = a[0]
min_idx = 0
max_idx = 0
Шаг 3. Проходим по списку, начиная с индекса 1.
for i in range(1, len(a)):
if a[i] < min_val:
min_val = a[i]
min_idx = i
if a[i] > max_val:
max_val = a[i]
max_idx = i
Шаг 4. Выводим результат.
if min_val == max_val:
print(f"min=max={min_val} index={min_idx}")
else:
print(f"min={min_val} index={min_idx} max={max_val} index={max_idx}")
Линейный и бинарный поиск в массиве
Линейный поиск — последовательный перебор элементов до нахождения нужного. Используется, когда массив не отсортирован. Сложность O(n).
Бинарный поиск — эффективный метод для отсортированного массива. Суть: делим массив пополам, сравниваем искомое с серединой, отбрасываем половину. Сложность O(log n). На ЕГЭ бинарный поиск часто встречается в заданиях на анализ алгоритмов (например, №22).
Важно: для бинарного поиска массив должен быть отсортирован по возрастанию или убыванию.
Рассмотрим обе реализации на примерах.
Задача 4 (линейный поиск). Дан список чисел и число X. Найдите индекс первого вхождения X в список. Если X нет, выведите -1.
Пример:
Вход: 2 3 5 7 11, X=5
Выход: 2
Шаг 1. Считываем список и X.
a = list(map(int, input().split()))
x = int(input())
Шаг 2. Линейный поиск.
index = -1
for i in range(len(a)):
if a[i] == x:
index = i
break
Шаг 3. Вывод.
print(index)
Задача 5 (бинарный поиск). Дан отсортированный по возрастанию список целых чисел и число X. Найдите индекс X в списке (любой, если есть дубликаты). Если X нет, выведите -1.
Пример:
Вход: 1 3 5 7 9, X=5
Выход: 2
Шаг 1. Считываем отсортированный список и X.
a = list(map(int, input().split()))
x = int(input())
Шаг 2. Бинарный поиск.
left = 0
right = len(a) - 1
index = -1
while left <= right:
mid = (left + right) // 2
if a[mid] == x:
index = mid
break
elif a[mid] < x:
left = mid + 1
else:
right = mid - 1
Шаг 3. Вывод.
print(index)
Как подготовиться к ЕГЭ по теме одномерных массивов
Чтобы уверенно решать задачи на массивы, нужно:
1. Научиться быстро читать и записывать массивы, особенно через map и split.
2. Освоить типовые шаблоны: перебор с условием, подсчёт суммы, поиск минимума/максимума.
3. Понимать разницу между линейным и бинарным поиском и когда их применять.
4. Решать задачи из открытого банка ФИПИ и демоверсий.
Если вы чувствуете, что некоторые моменты остаются непонятными, рекомендую разобрать тему с AI-репетитором. Например, в Наставнике AI можно выбрать персонажа, который объяснит материал в удобном для вас стиле — от строгой учительницы до весёлого кота. Это помогает закрепить тему через диалог и практику.
Помните: массивы — это база, без которой не обойтись в заданиях по обработке данных. Уделите им достаточно времени, и вы заметите, как другие темы становятся понятнее.
Частые вопросы
Без карты, без кредитки. Выбери персонажа — учи голосом, побеждай в баттлах.