wake-up-neo.com

IndexError: Listenzuordnungsindex außerhalb des Bereichs

Bitte beachten Sie den folgenden Code:

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

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

print j

Die Ausgabe (Python 2.6.6 unter Win 7 32-Bit) lautet:

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

Ich denke, es ist etwas einfaches, was ich nicht verstehe. Kann jemand es aufklären?

153
Vladan

j ist eine leere Liste, aber Sie versuchen in der ersten Iteration, die noch nicht existiert, in das Element [0] zu schreiben.

Versuchen Sie stattdessen Folgendes, um ein neues Element am Ende der Liste hinzuzufügen:

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

Ihre andere Option ist, j zu initialisieren:

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

Machen Sie j.append(l) anstelle von j[k] = l und vermeiden Sie k.

16
khachik

Sie können auch ein Listenverständnis verwenden:

j = [l for l in i]

oder machen Sie eine Kopie davon mit der Anweisung:

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

Vermeiden Sie auch die Verwendung von "L" in Kleinbuchstaben, da diese leicht mit 1 zu verwechseln sind

7
Tom

Ich denke, die Python-Methode insert ist was Sie suchen:

Fügt Element x an Position i ein.

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

array.insert(1,2)

print(array)

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

Sie könnten ein Wörterbuch (ähnlich einem assoziativen Array) für j verwenden

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

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

print j

wird drucken:

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

Ein weiterer Weg: 

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

In diesem Fall ist j ein numpy-Array

2
Alex

Vielleicht brauchst du extend ()

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

In Python mit Array können Sie nur ein Element anfügen und in das Array einfügen

0
Amartya Dutta

Da Sie j als leere Liste zugewiesen haben und in der Schleife versuchen, den 0. Indexwert von j zu finden, der mit Sicherheit nicht funktioniert. Versuchen Sie es mit j.append (l) Dies wird funktionieren.

0
A.K Singh