Почему последний индекс меньше длины списка

Индекс — это номер позиции, а длина списка — число элементов. При нумерации с нуля первый элемент стоит на позиции 0, второй — на позиции 1, и так далее. Поэтому в списке из пяти элементов позиции идут от 0 до 4: всего элементов пять, но последний индекс равен 4.

Это не особенность конкретного языка программирования, а удобный способ описывать смещение от начала списка. Индекс 0 означает «не отступать ни на один элемент», индекс 1 — перейти на одну позицию дальше. Для списка длиной `n` допустимый диапазон индексов — от 0 до `n − 1`.

Как возникает ошибка на границе

Представьте, что программа перебирает список длиной 5 и по ошибке считает, что последний индекс — 5. Тогда она проверит позиции 0, 1, 2, 3, 4, а затем попытается прочитать позицию 5. Такой позиции в списке нет: она находится сразу за его концом.

В зависимости от языка и способа обращения к данным программа может сообщить об ошибке, завершиться аварийно или дать небезопасный результат. Особенно легко промахнуться в условии цикла: если оно разрешает продолжать, пока индекс меньше или равен длине, последняя итерация уже выходит за пределы списка. Обычно проверяют, что индекс строго меньше длины.

Почему это важно для пустого списка

У пустого списка длина равна нулю, и допустимых индексов у него нет вовсе. Формула `длина − 1` здесь даёт −1 — это не индекс элемента, а знак того, что последней позиции не существует. Поэтому перед чтением первого элемента важно проверить, что список не пуст.

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