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

Обратите внимание на следующий код:

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

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

print j

Выход (Python 2.6.6 на Win 7 32-бит):

> Traceback (most recent call last): 
>     j[k] = l IndexError: list assignment index out of range

Я думаю, что это простое, я не понимаю. Может кто-нибудь его очистить?

Ответ 1

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

Попробуйте вместо этого добавить новый элемент в конец списка:

for l in i:
    j.append(l)

Ответ 2

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

j = [None] * len(i)

Ответ 3

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

Ответ 4

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

j = [l for l in i]

или сделайте копию с помощью заявления:

j = i[:]

Ответ 5

j.append(l)

Также избегайте использования "L" в нижнем регистре, потому что их легко путать с 1

Ответ 6

Я думаю, что метод Python insert - это то, что вы ищете:

Вставляет элемент x в положение i. list.insert (я, х)

array = [1,2,3,4,5]

array.insert(1,20)

print(array)

# prints [1,2,20,3,4,5]

Ответ 7

Вы можете использовать словарь (похожий на ассоциативный массив) для j

i = [1, 2, 3, 5, 8, 13]
j = {} #initiate as dictionary
k = 0

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

print j

напечатает:

{0: 1, 1: 2, 2: 3, 3: 5, 4: 8, 5: 13}

Ответ 8

Еще один способ:

j=i[0]
for k in range(1,len(i)):
    j = numpy.vstack([j,i[k]])

В этом случае j будет массивом numpy

Ответ 9

В Python с массивом вы можете только добавить и добавить элемент в массив

Ответ 10

Может быть, вам нужно расширить()

i=[1,3,5,7]
j=[]
j.extend(i)

Ответ 11

Поскольку вы назначили j как пустой список, и в цикле вы пытаетесь найти 0-е значение индекса j, которое, безусловно, не будет работать. Пытаться  j.append (л) Это будет работать