IndexError: индекс назначения списка вне диапазона - PullRequest
164 голосов
/ 13 апреля 2011

Пожалуйста, рассмотрите следующий код:

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

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

Ответы [ 9 ]

265 голосов
/ 13 апреля 2011

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

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

for l in i:
    j.append(l)
43 голосов
/ 27 января 2012

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

j = [None] * len(i)
21 голосов
/ 13 апреля 2011

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

13 голосов
/ 27 января 2012

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

j = [l for l in i]

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

j = i[:]
8 голосов
/ 13 апреля 2011
j.append(l)

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

7 голосов
/ 15 апреля 2017

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

Вставляет элемент x в позицию i.

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

array.insert(1,2)

print(array)

# prints [1,2,2,3,4,5]
6 голосов
/ 12 мая 2017

Вы можете использовать словарь (аналог ассоциативного массива) для 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}
3 голосов
/ 17 октября 2014

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

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

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

2 голосов
/ 09 февраля 2019

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

...