Повторяет сказанное здесь много раз, но с некоторой дополнительной информацией:
c[a[jj]] = [c[a[jj]]+c[b[jj]] for jj in range(len(a))]
Этот оператор присваивания списка выводит ошибку, поскольку левая сторона (цель назначено) пытается получить элемент, который не существует. Вы написали индекс индекса, который является законным, но интерпретатор ищет индекс, на который ссылается какой-то jj
, который еще не был определен.
В отличие от объекта словаря, где ключ может быть создан при его назначении, присвоение индекса для списка успешно выполняется, когда индекс находится в границах (ie. Позиция для назначения уже существует) или ссылка на имя уже определено.
jj
хорошо использовать в выражении понимания списка. Синтаксис понимания списка позволяет определить новую переменную в выражении как цель итерируемого range(len(a))
. Но поскольку интерпретатор оценивает весь оператор присваивания слева направо, jj
не существует до выражения понимания списка.
Наконец, кроме синтаксической ошибки, логика c вашего кода не приведет к ожидаемому результату. Пожалуйста, отредактируйте свое сообщение, чтобы оно точно отражало то, что вы пытаетесь сделать.
Редактировать: Здесь нужно внести несколько правок, которые были учтены в комментариях ниже.