Массивы: обработка и типовые алгоритмы (Python)
Создание списков (массивов) в Python, типовые алгоритмы обработки: сумма, поиск максимума, подсчёт элементов по условию, сортировка пузырьком.
В этой статье вы сможете узнать:
- как создать и заполнить массив (список) в Python;
- какие типовые алгоритмы обработки массива чаще всего встречаются в задачах ЕГЭ;
- как реализовать простую сортировку массива.
Создание и заполнение массива
В Python массив представлен структурой данных «список» (list). Список можно задать явно или заполнить в цикле, в том числе случайными числами.
a = [5, 3, 9, 1, 7, 2] # список задан явно
n = int(input())
a = []
for i in range(n):
a.append(int(input())) # заполнение списка вводимыми числами
import random
a = [random.randint(1, 100) for i in range(10)] # список из 10 случайных чисел от 1 до 100
Обращение к элементам массива
Элементы списка нумеруются с нуля. Длина списка определяется функцией len().
a = [10, 20, 30, 40]
print(a[0]) # 10 — первый элемент
print(a[-1]) # 40 — последний элемент
print(len(a)) # 4 — длина списка
Сумма и среднее значение элементов массива
a = [5, 3, 9, 1, 7, 2]
total = 0
for x in a:
total += x
print("Сумма:", total)
print("Среднее:", total / len(a))
Ту же сумму можно получить встроенной функцией sum(a), но для задач ЕГЭ важно уметь реализовать накопление суммы вручную через цикл.
Подсчёт количества элементов по условию
a = [5, 3, 9, 1, 7, 2]
count = 0
for x in a:
if x % 2 == 0:
count += 1
print("Количество чётных элементов:", count)
Поиск максимального и минимального элемента
a = [5, 3, 9, 1, 7, 2]
max_value = a[0]
max_index = 0
for i in range(len(a)):
if a[i] > max_value:
max_value = a[i]
max_index = i
print("Максимум:", max_value, "на позиции", max_index)
Поиск минимума реализуется аналогично, но с заменой знака сравнения на противоположный (a[i] < max_value).
Сортировка массива (сортировка пузырьком)
Сортировка пузырьком — простейший алгоритм сортировки, основанный на последовательном сравнении соседних элементов и их обмене местами, если они стоят в неправильном порядке.
a = [4, 2, 7, 1, 9, 3]
n = len(a)
for i in range(n - 1):
for j in range(n - 1 - i):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
print(a) # [1, 2, 3, 4, 7, 9]
Внешний цикл повторяется раз, а внутренний цикл на каждом проходе сравнивает пары соседних элементов, «всплывая» наибольший ещё не отсортированный элемент в конец списка — отсюда и название алгоритма.
Линейный поиск элемента
a = [5, 3, 9, 1, 7, 2]
target = 9
found_index = -1
for i in range(len(a)):
if a[i] == target:
found_index = i
break
print("Индекс найденного элемента:", found_index)
Алгоритм разбора задач с массивами
- Определите, как заполняется массив: явным перечислением, вводом с клавиатуры или генерацией по формуле/случайным образом.
- Определите, какая величина должна быть найдена или вычислена: сумма, количество элементов по условию, максимум/минимум, отсортированный массив или индекс искомого элемента.
- Для накопления суммы или количества заведите переменную-накопитель до цикла и обновляйте её на каждой итерации согласно условию задачи.
- Для поиска максимума/минимума сравнивайте каждый элемент с текущим найденным значением и обновляйте его при необходимости.
- Для сортировки методом пузырька используйте два вложенных цикла: внешний — по количеству проходов, внутренний — для сравнения и обмена соседних элементов.
- Проверьте граничные случаи: пустой массив, массив из одного элемента, повторяющиеся значения.
Примеры решения
Пример 1. Определите, что выведет программа:
a = [3, 8, 2, 10, 5]
count = 0
for x in a:
if x > 4:
count += 1
print(count)
Проверяем каждый элемент: (нет), (да), (нет), (да), (да) — всего 3 элемента больше 4.
Ответ: программа выведет 3.
Пример 2. Определите, что выведет программа:
a = [7, 2, 9, 4, 1]
min_value = a[0]
for i in range(1, len(a)):
if a[i] < min_value:
min_value = a[i]
print(min_value)
Минимальный элемент массива — 1.
Ответ: программа выведет 1.
Пример 3. Массив сортируется пузырьком по возрастанию. Что получится после первого прохода внешнего цикла?
Сравниваем и меняем местами соседние элементы: ; — без изменений; .
После первого прохода: (наибольший элемент 8 «всплыл» в конец).
Ответ: .
Часто задаваемые вопросы
Чем список (list) в Python отличается от массива в других языках программирования? Список в Python — это динамическая структура данных, размер которой может изменяться во время выполнения программы (можно добавлять и удалять элементы), тогда как классический массив в некоторых языках имеет фиксированный размер, заданный при создании; для задач ЕГЭ список используется как основной аналог массива.
Почему при поиске максимума важно правильно инициализировать начальное значение? Если начальное значение переменной-накопителя максимума задать неверно (например, слишком маленьким числом или взять произвольное значение вместо первого элемента массива), результат может оказаться неправильным — надёжнее всего инициализировать эту переменную первым элементом самого массива.
Почему сортировка пузырьком считается неэффективной для больших массивов? Потому что она выполняет порядка сравнений и обменов для массива из элементов, что делает её медленной при больших объёмах данных — для больших массивов на практике используют более эффективные алгоритмы сортировки, но для учебных задач ЕГЭ пузырьковая сортировка достаточно наглядна и проста для разбора вручную.
Как изменится программа поиска максимума, если нужно найти индекс, а не само значение?
Нужно завести отдельную переменную для хранения индекса (например, max_index) и обновлять её вместе со значением максимума на каждой итерации, когда находится новый наибольший элемент — сам цикл поиска при этом не меняется.
Похожие темы для изучения
- Основы программирования на Python: переменные, ветвления, циклы
- Рекурсивные алгоритмы (Python)
- Логические операции и таблицы истинности
- Электронные таблицы: формулы и функции
Задачи для самостоятельного решения
- Определите, что выведет программа, вычисляющая сумму элементов массива , кратных 4.
- Напишите программу, находящую максимальный элемент массива и его индекс.
- Определите результат сортировки пузырьком массива после первого прохода внешнего цикла.
- Напишите программу, подсчитывающую количество отрицательных элементов в массиве .
- Напишите программу линейного поиска элемента 23 в массиве , которая находит индекс первого вхождения.
- Объясните, почему после -го прохода внешнего цикла сортировки пузырьком последние элементов массива гарантированно стоят на своих местах.