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:
> 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 clarifier cela?
append
est la bonne solution pour votre cas d'utilisation, mais il existe une méthode d'insertion sur la liste python qui peut s'insérer directement à la i'ème position dans la liste.j.insert(k, l)
Réponses:
j
est une liste vide, mais vous essayez d'écrire dans l'élément[0]
dans 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)
Bien sûr, vous ne feriez jamais cela en pratique si vous ne vouliez que copier une liste existante. Vous feriez juste:
Sinon, si vous souhaitez utiliser la liste Python comme un tableau dans d'autres langages, vous pouvez pré-créer une liste avec ses éléments définis sur une valeur nulle (
None
dans l'exemple ci-dessous), et plus tard, écraser les valeurs dans des positions spécifiques: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
La chose à réaliser est qu'un
list
objet ne vous permettra pas d'attribuer une valeur à un index qui n'existe pas.la source
Votre autre option consiste à initialiser
j
:j = [None] * len(i)
la source
Faites
j.append(l)
au lieuj[k] = l
et évitezk
du tout.la source
j+=[l]
.append
c'est beaucoup plus courant (peut-être pour une raison - je pense que c'est un peu plus facile à comprendre), pas vraiment supérieur de quelque manière que. (Modifier @khachik: Non,+=
modifie sur place)Vous pouvez également utiliser une compréhension de liste:
j = [l for l in i]
ou faites-en une copie à l'aide de l'instruction:
la source
Évitez également d'utiliser des «L» minuscules car il est facile de les confondre avec les 1
la source
Je pense que l' insertion de méthode Python est ce que vous recherchez:
Insère l'élément x à la position i. list.insert (i, x)
array = [1,2,3,4,5] array.insert(1,20) print(array) # prints [1,2,20,3,4,5]
la source
insert
quand aappend
été fourni spécifiquement à cet effet.[1, 20, 2, 3, 4, 5]
.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}
la source
Encore une façon:
j=i[0] for k in range(1,len(i)): j = numpy.vstack([j,i[k]])
Dans ce cas, il y
j
aura un tableau numpyla source
Peut-être avez-vous besoin de prolonger ()
i=[1,3,5,7] j=[] j.extend(i)
la source