Почему это показывает индекс вне диапазона, даже если все индексы действительны?

#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] то, чего нет в списке.