Python, индекс вне диапазона, список

#python #list

Вопрос:

Мне нужно изменить число с наибольшим индексом и число с наименьшим индексом между собой в введенной строке, но появляется ошибка

Ошибка:

 list2[0], list2[len1] = list2[len1], list2[0] IndexError: list index out of range  

Код:

 list1 = input("Введите список: ") list2 = list1.split() len1 = int(len(list2)) list2[0], list2[len1] = list2[len1], list2[0] print(list2)  

Как это можно исправить?

Комментарии:

1. поскольку индексирование начинается с 0 последнего элемента списка, является l[len(l) -1] или просто l[-1]

Ответ №1:

Список индексируется с 0. Если ваш список содержит 4 элемента, длина равна 4, но последний индекс равен 3 (4 — 1).

 list1 = input("Введите список: ") list2 = list1.split() len1 = int(len(list2)) - 1 # lt;- HERE list2[0], list2[len1] = list2[len1], list2[0] print(list2)  

Ответ №2:

Используйте индекс [-1] вместо len(list2)-1 того, чтобы получить последний элемент:

 list1 = input("Введите список: ").split() list1[0], list1[-1] = list1[-1], list1[0] print(list1)  

Комментарии:

1. @369 Это правильный ответ! Вам вообще не нужно знать длину списка, хотя вы можете проверить, что он не пустой!

Ответ №3:

Индексирование всегда равно 0 — длина-1.

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

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

Однако это должно сработать

 ip = input("Введите список: ") list1 = ip.split(" ") len1 = int(len(list1)) list1[0], list1[len1-1] = list1[len1-1], list1[0] print(list1)  

Ответ №4:

Как указано в ошибке, индекс для «list2[len1]» находится вне диапазона.

Поскольку метод len() в python возвращает фактическую длину списка, тогда как индексация списка начинается с 0-й позиции

для приведенного выше кода вы можете попробовать сделать это:

 list2[0], list2[len1-1] = list2[len1-1], list2[0]