← Все вопросы

IndexError: list index out of range при обходе списка по range(len)

Задан 28 месяцев назад692 просмотров2 ответа
6

Хочу вывести соседние пары элементов, но получаю IndexError: list index out of range:

a = [10, 20, 30]
for i in range(len(a)):
    print(a[i], a[i + 1])

Вроде по индексам иду правильно, почему вылетает?

2 ответа

11
✓ Принятый ответ — помог автору

Список длиной 3 имеет индексы 0, 1, 2. На последней итерации i = 2, и ты обращаешься к a[i + 1] = a[3] — а такого индекса уже нет. Отсюда index out of range.

Если берёшь пары (текущий + следующий), цикл должен останавливаться на один раньше:

for i in range(len(a) - 1):
    print(a[i], a[i + 1])

Теперь i доходит только до 1, и a[i+1] максимум a[2] — всё в пределах.

4

Более питоновский способ ходить по парам — через zip:

for cur, nxt in zip(a, a[1:]):
    print(cur, nxt)

Тут вообще нет индексов, и за границы выйти невозможно.

Ваш ответ

Войдите, чтобы ответить на вопрос.