Незнайка
Вся теория
Теория· 6 мин чтения

Массивы: обработка и типовые алгоритмы (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]

Внешний цикл повторяется n−1n-1 раз, а внутренний цикл на каждом проходе сравнивает пары соседних элементов, «всплывая» наибольший ещё не отсортированный элемент в конец списка — отсюда и название алгоритма.

Линейный поиск элемента

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. Определите, как заполняется массив: явным перечислением, вводом с клавиатуры или генерацией по формуле/случайным образом.
  2. Определите, какая величина должна быть найдена или вычислена: сумма, количество элементов по условию, максимум/минимум, отсортированный массив или индекс искомого элемента.
  3. Для накопления суммы или количества заведите переменную-накопитель до цикла и обновляйте её на каждой итерации согласно условию задачи.
  4. Для поиска максимума/минимума сравнивайте каждый элемент с текущим найденным значением и обновляйте его при необходимости.
  5. Для сортировки методом пузырька используйте два вложенных цикла: внешний — по количеству проходов, внутренний — для сравнения и обмена соседних элементов.
  6. Проверьте граничные случаи: пустой массив, массив из одного элемента, повторяющиеся значения.

Примеры решения

Пример 1. Определите, что выведет программа:

a = [3, 8, 2, 10, 5]
count = 0
for x in a:
    if x > 4:
        count += 1
print(count)

Проверяем каждый элемент: 3≤43 \leq 4 (нет), 8>48>4 (да), 2≤42\leq4 (нет), 10>410>4 (да), 5>45>4 (да) — всего 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. Массив [6,3,8,2][6, 3, 8, 2] сортируется пузырьком по возрастанию. Что получится после первого прохода внешнего цикла?

Сравниваем и меняем местами соседние элементы: 6,3→3,66,3 \to 3,6; 6,86,8 — без изменений; 8,2→2,88,2 \to 2,8.

После первого прохода: [3,6,2,8][3, 6, 2, 8] (наибольший элемент 8 «всплыл» в конец).

Ответ: [3,6,2,8][3, 6, 2, 8].

Часто задаваемые вопросы

Чем список (list) в Python отличается от массива в других языках программирования? Список в Python — это динамическая структура данных, размер которой может изменяться во время выполнения программы (можно добавлять и удалять элементы), тогда как классический массив в некоторых языках имеет фиксированный размер, заданный при создании; для задач ЕГЭ список используется как основной аналог массива.

Почему при поиске максимума важно правильно инициализировать начальное значение? Если начальное значение переменной-накопителя максимума задать неверно (например, слишком маленьким числом или взять произвольное значение вместо первого элемента массива), результат может оказаться неправильным — надёжнее всего инициализировать эту переменную первым элементом самого массива.

Почему сортировка пузырьком считается неэффективной для больших массивов? Потому что она выполняет порядка n2n^2 сравнений и обменов для массива из nn элементов, что делает её медленной при больших объёмах данных — для больших массивов на практике используют более эффективные алгоритмы сортировки, но для учебных задач ЕГЭ пузырьковая сортировка достаточно наглядна и проста для разбора вручную.

Как изменится программа поиска максимума, если нужно найти индекс, а не само значение? Нужно завести отдельную переменную для хранения индекса (например, max_index) и обновлять её вместе со значением максимума на каждой итерации, когда находится новый наибольший элемент — сам цикл поиска при этом не меняется.

Похожие темы для изучения

  • Основы программирования на Python: переменные, ветвления, циклы
  • Рекурсивные алгоритмы (Python)
  • Логические операции и таблицы истинности
  • Электронные таблицы: формулы и функции

Задачи для самостоятельного решения

  1. Определите, что выведет программа, вычисляющая сумму элементов массива [2,4,6,8,10][2, 4, 6, 8, 10], кратных 4.
  2. Напишите программу, находящую максимальный элемент массива [12,45,7,23,56,3][12, 45, 7, 23, 56, 3] и его индекс.
  3. Определите результат сортировки пузырьком массива [9,1,5,3][9, 1, 5, 3] после первого прохода внешнего цикла.
  4. Напишите программу, подсчитывающую количество отрицательных элементов в массиве [−3,5,−1,8,−7,2][-3, 5, -1, 8, -7, 2].
  5. Напишите программу линейного поиска элемента 23 в массиве [10,23,45,7,23,15][10, 23, 45, 7, 23, 15], которая находит индекс первого вхождения.
  6. Объясните, почему после kk-го прохода внешнего цикла сортировки пузырьком последние kk элементов массива гарантированно стоят на своих местах.