2017-01-15 6 views
-2

Das sieht so einfach aus, ich verstehe nicht, warum es nicht funktioniert.Zugriff auf vorheriges Element in einer Python-Liste

Dieser Code greift auf das vorherige Element in der Liste mit [i-1]:

# I found this on Stack Overflow and it works 
l=[1,2,3] 
for i,item in enumerate(l): 
    if item==2: 
     get_previous=l[i-1] 
     print "get_previous = " + str(get_previous) 

Dies ist nicht das vorherige Listenelement nicht zugreifen, obwohl es existiert, weil es gedruckt wird als line1[0] aus.

# What happens to $1,000 if you earn 1,2,3% interest for 30 years? 
initial_amount = 1000.00 
ratio1 = 1.01 
ratio2 = 1.02 
ratio3 = 1.03 
line1 = [] 
line2 = [] 
line3 = [] 
line1.append(initial_amount) 
line2.append(initial_amount) 
line3.append(initial_amount) 
print "line1[0] = " + str(line1[0]) 
for index in range(0, 30): 
    print "index outside of if = " + str(index) 
    if(index > 0): 
     print "index inside if = " + str(index) 
     line1[index] = line1[index-1] * ratio1 
     line2[index] = line2[index-1] * ratio2 
     line3[index] = line3[index-1] * ratio3 

Die Ausgabe lautet:

get_previous = 1 
line1[0] = 1000.0 
index outside of if = 0 
index outside of if = 1 
index inside if = 1 
Traceback (most recent call last): 
    line1[index] = line1[index-1] * ratio1 
IndexError: list assignment index out of range 
+0

Es schlägt fehl, weil 'list [index]' beim ersten Mal nicht existiert. Sie müssen neue Daten an die Liste anhängen. – jszakmeister

Antwort

3

Sie verwenden sollten line1.append(..) als:

line1.append(line1[index-1] * ratio1) 
line2.append(line2[index-1] * ratio2) 
line3.append(line3[index-1] * ratio3) 

Weil Sie versuchen, zu Aktualisierungswert am 1. Index, die derzeit nicht vorhanden ist, in Liste (dh Länge der Liste line1 ist 1). Um den Wert endlich einfügen, hat Python list.append(..) Methode.

+0

Danke, Ihr Vorschlag hat funktioniert. Ich dachte, es sei wegen der Referenz auf [Index-1] fehlgeschlagen, aber es scheiterte wegen der Referenz [Index]. Ich nahm an, dass es das [index] -Element in der Liste erstellen würde. Ich denke, das passiert in Perl und nicht in Python. –

+0

@ R.Wayne Es sollte in den Sprachen arbeiten, in denen Sie die Größe der Liste beim Erstellen des Array-Objekts definieren. Aber in Python (wie einige der anderen Sprachen), da die Sie nicht die Größe und Größe definieren wird dynamisch erhöht - es wird nicht funktionieren. Und Perl muss in frühere Kategorie fallen (PS: Perl nie benutzt) –

Verwandte Themen