Seite 1 von 1
IndexError: list assignment index out of range
Verfasst: Montag 10. März 2008, 20:32
von kurvenschubser
Guten Tag!
Könnt ihr mir nen Tip geben warum das nicht funktioniert?
Code: Alles auswählen
anteile = []
kumulanteile = []
for n in range(1, 11, 1):
anteile[n-1] = 0
kumulanteile[n-1] = 0
Traceback (most recent call last):
File "test2.py", line 7, in <module>
anteile[n-1] = 0
IndexError: list assignment index out of range
MfG
Verfasst: Montag 10. März 2008, 20:33
von Leonidas
Weil du auf einen Indexwert zugreifst den es nicht gibt?!
Was willst du denn eigentlich machen?
Verfasst: Montag 10. März 2008, 20:42
von kurvenschubser
Ich möchte die Listen mit Nullen füllen. Dann sollen in den entsprechenden Positionen der Wert per Schleife um jeweils einen gewissen Wert erhöht werden (float). Das Resultat sollte so aussehen
Code: Alles auswählen
Note: Anteil: Kummulierter Anteil:
1.0 0.123 0.123
1.3 0.2 0.323
. . .
. . .
. . .
5.0 . 1.0
EDIT: Sieht bischen merkwürdig aus, die Werte sollten jeweils unter den Überschriften stehen...
Re: IndexError: list assignment index out of range
Verfasst: Montag 10. März 2008, 20:49
von Hyperion
Ähem ... so wird das aber nix

Wenns nur ums Auffüllen geht ...
Allerdings erscheint mir Deine Struktur nicht wirklich geeignet! (Oder bekommst Du die Listen irgend wo her?)
Verfasst: Montag 10. März 2008, 20:53
von Leonidas
Code: Alles auswählen
noten = [1.0, 1.3, 5.0]
anteile = [0.123, 0.2, 0]
kumuliert = [noten + anteil for note, anteil in zip(noten, anteile)]
# oder anders
kumuliert = map(sum, zip(noten, anteile))
Verfasst: Montag 10. März 2008, 21:04
von kurvenschubser
Die Werte (außer den Noten) waren als Beispiel gedacht.
Ich habe eine Liste mit der Häufigkeit der Noten.
In anteile soll stehen:
häufigkeit von note geteilt durch Gesamtanzahl der Noten.
In kumulanteile soll dann stehn:
kumulanteile = kumulanteile[i-1] + anteile
Ich werde erst mal mit Hyperions Tip weitermachen...
MfG
Wg. auffüllen mit Nullen
Verfasst: Donnerstag 13. März 2008, 20:29
von kurvenschubser
Es ist doch so, dass man explizit mit Nullen füllen muss oder? Sonst würde in so einer Liste automatisch von python ein zufälliger Wert gesetzt werden?
EDIT: Zur Erläuterung:
Code: Alles auswählen
anteile = [0]*11
for y in range(1, 12, 1):
anteile[y-1] = float(notenliste[y]) / teilnehmernr
In notenliste[] stehen pro Note (es gibt 11: 1,0 1,3 1,7 2,0...5,0) die Anzahl derjenigen die diese Note erreicht haben. teilnehmernr ist die Anzahl der Klausurteilnehmer.
Verfasst: Donnerstag 13. März 2008, 21:48
von BlackJack
Nein, es wird kein zufälliger Wert gesetzt. Das wäre ja noch schöner. Es gibt einen `IndexError` wenn man auf ein Element zugreifen will, dass es nicht gibt.
Deine Erläuterung lässt böses ahnen. Bitte fang an Python zu programmieren und höre auf BASIC, Pascal oder wo auch immer Du diese Angewohnheiten her hast, in Python schreiben zu wollen. ``for y in range(len(notenliste))`` wäre ja schon schlechter Stil, aber die Zahlen hart zu kodieren und dann auch noch unnötigerweise um 1 nach oben verschoben, ist echt gruselig.
Code: Alles auswählen
anteile = [float(n) / teilnehmer_anzahl for n in notenliste]