Python

Как обратиться к индексу массива в Python: списки, срезы и IndexError

В Python к элементу массива обычно обращаются через список и квадратные скобки: items[0] берет первый элемент, items[1] второй, а items[-1] последний. В разговоре часто говорят «массив», но в базовом Python чаще используется именно list, то есть список

Главное правило: индексация начинается с нуля. Если в списке три элемента, у них индексы 0, 1, 2, а не 1, 2, 3

Простой пример

fruits = ["яблоко", "банан", "апельсин"]

print(fruits[0])
print(fruits[1])
print(fruits[2])

Результат

яблоко
банан
апельсин

Первый элемент находится по индексу 0. Это одна из самых частых точек спотыкания у новичков, особенно если до этого человек привык считать элементы с единицы

Почему последний индекс не равен длине списка

Посмотрим на список из трех элементов

fruits = ["яблоко", "банан", "апельсин"]
print(len(fruits))

len(fruits) вернет 3, но последнего индекса 3 в списке нет. Последний индекс равен len(fruits) - 1

last_index = len(fruits) - 1
print(fruits[last_index])

Результат

апельсин

Если написать fruits[3], Python выдаст IndexError

print(fruits[3])

Ошибка

IndexError: list index out of range

Это значит, что вы просите элемент за пределами списка

Отрицательные индексы

Python умеет обращаться к элементам с конца списка

fruits = ["яблоко", "банан", "апельсин"]

print(fruits[-1])
print(fruits[-2])
print(fruits[-3])

Результат

апельсин
банан
яблоко

-1 — последний элемент, -2 — предпоследний, -3 — третий с конца

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

last_fruit = fruits[-1]
print(last_fruit)

Как изменить элемент по индексу

Индекс можно использовать не только для чтения, но и для изменения элемента

fruits = ["яблоко", "банан", "апельсин"]
fruits[1] = "груша"

print(fruits)

Результат

['яблоко', 'груша', 'апельсин']

Здесь элемент с индексом 1 был заменен. Поскольку индексация идет с нуля, это второй элемент списка

Как пройти по списку вместе с индексом

Если нужно получить и индекс, и значение, используйте enumerate()

fruits = ["яблоко", "банан", "апельсин"]

for index, fruit in enumerate(fruits):
    print(index, fruit)

Результат

0 яблоко
1 банан
2 апельсин

Такой вариант читается лучше, чем ручной перебор через range(len(...)), если вам нужны оба значения

Когда использовать range(len())

Иногда индекс нужен, чтобы менять элементы списка на месте

numbers = [1, 2, 3, 4]

for index in range(len(numbers)):
    numbers[index] = numbers[index] * 2

print(numbers)

Результат

[2, 4, 6, 8]

Здесь range(len(numbers)) дает индексы 0, 1, 2, 3, а мы по ним меняем значения

Но если вы просто читаете элементы, лучше писать проще

for number in numbers:
    print(number)

Срезы: несколько элементов по индексам

Срез позволяет взять не один элемент, а часть списка

numbers = [10, 20, 30, 40, 50]

print(numbers[1:4])

Результат

[20, 30, 40]

Срез numbers[1:4] берет элементы с индекса 1 до индекса 4, но сам индекс 4 не включается

Еще примеры

print(numbers[:3])
print(numbers[2:])
print(numbers[-2:])

Результат

[10, 20, 30]
[30, 40, 50]
[40, 50]

Срезы полезны для выборки начала, конца или середины списка

Как безопасно обратиться к индексу

Если индекс приходит от пользователя или считается в программе, сначала проверьте границы

fruits = ["яблоко", "банан", "апельсин"]
index = 5

if 0 <= index < len(fruits):
    print(fruits[index])
else:
    print("Такого индекса нет")

Так программа не упадет с IndexError

Для отрицательных индексов проверка сложнее, но в учебных задачах обычно достаточно явно работать с положительными индексами

Массив и список: есть ли разница

В базовом Python список создается так

items = [1, 2, 3]

Это list. Он может хранить разные типы данных

items = [1, "текст", True]

Настоящие массивы тоже существуют, например через модуль array или библиотеку numpy, но для большинства начальных задач под «массивом» в Python имеют в виду список

Если вы учитесь по школьным задачам или алгоритмам, почти всегда начинайте со списка

Мини-практика

Создайте список оценок и выведите первый, последний и средний элемент

scores = [5, 4, 3, 5, 4]

print("Первая оценка:", scores[0])
print("Последняя оценка:", scores[-1])
print("Средняя позиция:", scores[2])

После этого замените вторую оценку на 5

scores[1] = 5
print(scores)

Затем пройдите по списку через enumerate() и выведите номер позиции и значение

Частые ошибки

Обращаться к первому элементу через индекс 1

В Python первый элемент — items[0], а не items[1]

Путать длину списка и последний индекс

Если длина списка 3, последний индекс 2

Не проверять индекс от пользователя

Если пользователь вводит число, оно может быть больше длины списка. Без проверки программа упадет

Использовать range(len()) без необходимости

Если индекс не нужен, проще пройти по значениям напрямую через for item in items

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x