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 ...

Code: Alles auswählen

anteile = [0]*10
kumulanteile = [0] *10
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]