web-dev-qa-db-fra.com

IndexError: index d'affectation de liste hors limites

Veuillez considérer le code suivant:

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

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

print j

La sortie (Python 2.6.6 sur Win 7 32 bits) est la suivante:

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

Je suppose que c'est quelque chose de simple que je ne comprends pas. Quelqu'un peut-il éclaircir?

153
Vladan

j est une liste vide, mais vous essayez d'écrire dans l'élément [0] lors de la première itération, qui n'existe pas encore.

Essayez plutôt ce qui suit pour ajouter un nouvel élément à la fin de la liste:

for l in i:
    j.append(l)
245
Steve Mayne

Votre autre option est d’initialiser j:

j = [None]*max(i)
37
Rsh

Faites j.append(l) au lieu de j[k] = l et évitez k du tout.

16
khachik

Vous pouvez également utiliser une compréhension de liste:

j = [l for l in i]

ou en faire une copie en utilisant la déclaration:

j = i[:]
12
Jason Sundram
j.append(l)

Évitez également d'utiliser des "L" minuscules, car il est facile pour eux de les confondre

7
Tom

Je pense que la méthode Python insert est ce que vous recherchez:

Insère l'élément x à la position i.

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

array.insert(1,2)

print(array)

# prints [1,2,2,3,4,5]
6
water

Vous pouvez utiliser un dictionnaire (similaire à un tableau associatif) pour 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

imprimera:

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

Une autre façon: 

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

Dans ce cas, j sera un tableau numpy

2
Alex

Peut-être avez-vous besoin de extend ()

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

En python avec tableau, vous pouvez uniquement ajouter et ajouter un élément au tableau.

0
Amartya Dutta

Puisque vous avez assigné j comme liste vide et que vous essayez dans la boucle de trouver la 0ème valeur d’index de j qui ne fonctionnera sûrement pas. Essayez j.append (l) Cela fonctionnera.

0
A.K Singh