ГлавнаяУрокиИнформатика 9 класс

§ 1.5. Обработка одномерных массивов целых чисел на языке Python

Прочитай параграф о массивах в Python — как их заполнять и выводить, как считать сумму, искать элементы и сортировать — и ответь на 10 вопросов.

До сих пор каждая величина в программе получала собственное имя: a, b, s, k. Пока величин три-четыре, это удобно. Но программе часто достаются сотни и тысячи однотипных чисел: оценки всего класса за четверть, температура за каждый час месяца, баллы всех участников олимпиады. Придумывать имя каждому такому числу бессмысленно, а обработать их хочется одинаково — одним коротким циклом. Поэтому однотипные данные собирают в структуру данных, и самая простая из них — массив.

Определение. Массив — набор однотипных элементов под одним общим именем; у каждого из них есть собственный номер, который называют индексом.

Похожую запись вы видели в математике: члены числовой последовательности обозначают одной буквой с номером — b₁, b₂, b₃ и так далее. В программе номер пишут не внизу, а в квадратных скобках после имени. Для имени массива действуют те же требования, какие предъявляют к именам переменных: латинские буквы, цифры и знак подчёркивания, причём начинается имя с буквы.

Определение. Размерность массива — количество индексов, которое нужно указать, чтобы однозначно добраться до одного элемента. Массив с одним индексом называют одномерным, с двумя — двумерным (он похож на таблицу, где элемент задан номером строки и номером столбца), и так далее. В этом уроке речь идёт только об одномерных массивах целых чисел: каждый элемент в них задан одним номером.

Задачи на массивы бывают самые разные, но почти все они собираются из трёх типовых алгоритмов: 1) суммирование значений элементов; 2) поиск элемента с заданными свойствами; 3) сортировка массива. На массивах особенно хорошо видно, в чём сила компьютера: программа в пять строк с одинаковой скоростью обработает и десять чисел, и десять тысяч.

Отдельной структуры «массив» в языке Python нет. Группу однотипных значений хранят в списке — объекте типа list, и дальше в уроке мы будем называть такой список массивом. Список гибче классического массива в двух отношениях. Во-первых, это динамическая структура: число его элементов может меняться прямо во время работы программы, элементы можно добавлять и удалять. Во-вторых, в одном списке разрешено хранить данные разных типов вперемешку, например числа и строки. Нашим программам эти вольности не понадобятся: у нас массив — это набор целых чисел.

Обращение к элементу массива

Чтобы получить элемент, пишут имя массива и сразу за ним в квадратных скобках индекс нужного элемента. Главное правило Python: нумерация элементов всегда начинается с нуля. Первый элемент имеет индекс 0, второй — индекс 1, а последний — на единицу меньше, чем всего элементов в массиве.

Пусть в массиве t записана температура воздуха в полдень за одну неделю, с понедельника по воскресенье (рис. 1). Создаётся он одной строкой:

t = [3, -2, 5, 0, 7, -4, 1]

Семь голубых ячеек в ряд с числами 3, −2, 5, 0, 7, −4, 1; над ними индексы от 0 до 6, под ними подписи t[0] … t[6]. Ячейка с числом 7 выделена оранжевым, стрелки подписаны «индекс элемента», «значение элемента» и «обращение к элементу: t[4] равно 7».
Рис. 1. Одномерный массив t из семи элементов: индекс над ячейкой, значение в ячейке, обращение к элементу под ней.

Здесь t — имя массива, а t[0] = 3. Такую запись читают как «значение элемента массива t с индексом 0 равно 3» или короче: «t нулевое равно 3». Точно так же t[1] = -2 и t[4] = 7. Температура в воскресенье — это t[6], а вовсе не t[7]: элемента с индексом 7 в массиве из семи чисел нет.

Индекс не обязан быть записан числом. В квадратных скобках может стоять целая переменная или выражение, значение которого — целое число. Например, при k = 2 запись t[2 * k + 1] означает t[5], то есть -4. Индексом может служить даже значение другого элемента: t[3] равно 0, поэтому t[t[3]] — это t[0], то есть 3. Убедиться в этом можно такой программой:

t = [3, -2, 5, 0, 7, -4, 1] k = 2 print(t[2 * k + 1], t[t[3]])

Она напечатает -4 3: сначала вычисляется то, что стоит в скобках, и только потом берётся элемент с получившимся номером.

Количество элементов массива называют его длиной. Длину возвращает функция len: для массива с именем A это запись N = len(A), а для нашей недели len(t) даёт 7. Обычно длину сразу сохраняют в отдельной переменной, например n = len(t), и дальше пишут n всюду, где нужно число элементов. Выгода двойная. Программа читается легче: n сразу говорит, что имеется в виду. А если массив станет длиннее, исправлять придётся одну строку, а не десяток разбросанных по программе чисел.

Заполнение массива

Прежде чем работать с элементами, массив нужно создать. Обращение к элементу, которого нет, — это ошибка: программа аварийно завершится с сообщением IndexError, то есть «индекс вне допустимых границ». Например, так будет после команд

a = [0] * 5 print(a[5])

— у массива из пяти элементов последний индекс 4.

Создать массив можно несколькими способами. Самый прямой — перечислить значения через запятую в квадратных скобках:

ocenki = [5, 4, 4, 3, 5, 2] print(len(ocenki))

Эта программа печатает 6 — столько оценок записано в массив ocenki.

Второй способ — «размножить» список из одного элемента. Запись [0] * 6 означает массив из шести нулей. Такой заготовкой пользуются, когда размер известен заранее, а значения появятся позже:

n = 6 a = [0] * n print(a)

Небольшой массив можно ввести с клавиатуры. Цикл с параметром перебирает индексы от 0 до n − 1 и на каждом шаге читает одно число:

n = 4 h = [0] * n for k in range(n): h[k] = int(input())

Функция input возвращает строку, которую набрал пользователь; функция int превращает её в целое число, и это число записывается в элемент с текущим индексом k. Какой по счёту элемент он сейчас вводит, пользователю приходится помнить самому. Удобнее, когда программа перед каждым вводом показывает индекс:

for k in range(n): h[k] = int(input('h[{}] = '.format(k)))

Метод format подставляет значение k на место пустых фигурных скобок. Поэтому перед вводом третьего числа на экране появится подсказка h[2] = и справа от неё будет мигать курсор — программа ждёт числа.

Третий способ — вычислить значения элементов по формуле оператором присваивания.

Дано: массив kv из пяти элементов заполняется в цикле командой kv[j] = j * j. Какие значения получат элементы?

n = 5 kv = [0] * n for j in range(n): kv[j] = j * j print(kv)

Решение: переменная j пробегает значения 0, 1, 2, 3, 4, и каждый элемент получает квадрат своего индекса. Заметьте: первым идёт 0, потому что первый индекс — ноль. Ответ: [0, 1, 4, 9, 16].

Для учебных задач массив удобно заполнять случайными числами. Генератор случайных чисел находится в модуле random; оттуда подключают функцию randint, которая возвращает случайное целое число из заданного диапазона:

from random import randint sl = [0] * 8 for i in range(8): sl[i] = randint(-20, 20) # оба конца отрезка возможны

Вызов randint(-20, 20) даёт целое число из отрезка от −20 до 20, и оба конца входят в отрезок: выпасть могут и −20, и 20.

Дальше — в приложении

Полный пересказ по учебнику «Информатика 9 класс», тест из большого пула вопросов и разбор ошибок с ИИ-репетитором. За сданный тест ребёнок получает экранное время — родители задают, сколько минут стоит урок.

Пройти урок бесплатноКак это работает

Вопросы из теста

Правильные ответы и разбор ошибок — в приложении: при пересдаче вопросы меняются, поэтому списать не получится.

Чем индекс элемента массива отличается от значения этого элемента?

Массив создан командой a = [0] * 5. Что произойдёт при выполнении следующей команды?

← § 1.4. Обработка одномерных массивов целых чисел на языке Паскаль§ 1.6. Алгоритмы управления →