#python #list #indexoutofrangeexception
Вопрос:
не мог бы кто-нибудь, пожалуйста, объяснить мне, почему это не работает, есть ли какая-то проблема с подчеркиванием, о которой я не знаю, когда делаю это?
a = [1, 2, 3, 4, 5]
i = 0
print(i)
print(a[i] 3)
print(a)
a[i], a[a[i] 3] = a[a[i] 3], a[i] # this shows error even tho below is the same and does not
#a[0], a[4] = a[4], a[0]
print(a)
Комментарии:
1. Вы меняете некоторые элементы массива в разное время. Лучше использовать:
j = a[i] 3; a[i],a[j] = a[j],a[i]
если вы хотите предсказуемости.
Ответ №1:
Распаковка не происходит одновременно. Он распаковывается слева направо.
Поэтому, когда вы распаковываете кортеж, вы устанавливаете a[i] = a[a[i] 3] = 5
, затем пытаетесь установить a[a[i] 3] = a[i]
, но a[i] 3 = 8
это находится за пределами диапазона.
Комментарии:
1. Излишне говорить, что никогда не следует писать подобный код именно по этой причине… Если вы хотите это доказать,
a[i], a[print(a[i]) or 0] = a[a[i] 3], a[i]
выведите 5.2. Я вижу, у меня была какая-то проблема, мне было интересно, почему решение присвоило индекс переменной, поэтому я попытался провести рефакторинг и получил это… спасибо!
Ответ №2:
после назначения a[i]= a[a[i] 3]
списка теперь, [5, 2, 3, 4, 5]
значит, a[a[i] 3]
становится a[8]
то, чего нет в списке.