Вопрос-Ответ

Why does this iterative list-growing code give IndexError: list assignment index out of range? How can I repeatedly add (append) elements to a list?

Почему этот итеративный код увеличения списка выдает IndexError: индекс назначения списка вне диапазона? Как я могу повторно добавлять элементы в список?

Я пытался написать какой-то код, например:

i = [1, 2, 3, 5, 8, 13]
j = []
k = 0

for l in i:
j[k] = l
k += 1

Но я получаю сообщение об ошибке, в котором говорится IndexError: list assignment index out of range, ссылаясь на j[k] = l строку кода. Почему это происходит? Как я могу это исправить?

Переведено автоматически
Ответ 1

j пустой список, но вы пытаетесь записать в элемент [0] на первой итерации, который еще не существует.

Вместо этого попробуйте следующее, чтобы добавить новый элемент в конец списка:

for l in i:
j.append(l)

Конечно, вы бы никогда не сделали этого на практике, если бы все, что вы хотели сделать, это скопировать существующий список. Вы бы просто сделали:

j = list(i)

В качестве альтернативы, если вы хотите использовать список Python как массив в других языках, вы могли бы предварительно создать список, элементам которого присвоено значение null (None в примере ниже), а позже перезаписать значения в определенных позициях:

i = [1, 2, 3, 5, 8, 13]
j = [None] * len(i)
#j == [None, None, None, None, None, None]
k = 0

for l in i:
j[k] = l
k += 1

Следует понимать, что list объект не позволит вам присвоить значение индексу, который не существует.

Ответ 2

Другой ваш вариант - инициализировать j:

j = [None] * len(i)
Ответ 3

Делать j.append(l) вместо j[k] = l и избегать k вообще.

Ответ 4

Вы также могли бы использовать понимание списка:

j = [l for l in i]

или создавать его копию с помощью инструкции:

j = i[:]
2023-10-23 07:42 python list