IndexError: list assignment index out of range

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
kurvenschubser
User
Beiträge: 15
Registriert: Montag 10. März 2008, 01:49
Wohnort: Berlin

IndexError: list assignment index out of range

Beitragvon kurvenschubser » Montag 10. März 2008, 20:32

Guten Tag!
Könnt ihr mir nen Tip geben warum das nicht funktioniert?
[code=]anteile = []
kumulanteile = []

for n in range(1, 11, 1):
anteile[n-1] = 0
kumulanteile[n-1] = 0[/code]

Traceback (most recent call last):
File "test2.py", line 7, in <module>
anteile[n-1] = 0
IndexError: list assignment index out of range

MfG
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 10. März 2008, 20:33

Weil du auf einen Indexwert zugreifst den es nicht gibt?!

Was willst du denn eigentlich machen?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
kurvenschubser
User
Beiträge: 15
Registriert: Montag 10. März 2008, 01:49
Wohnort: Berlin

Beitragvon kurvenschubser » Montag 10. März 2008, 20:42

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=]
Note: Anteil: Kummulierter Anteil:
1.0 0.123 0.123
1.3 0.2 0.323
. . .
. . .
. . .
5.0 . 1.0[/code]

EDIT: Sieht bischen merkwürdig aus, die Werte sollten jeweils unter den Überschriften stehen...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Re: IndexError: list assignment index out of range

Beitragvon Hyperion » Montag 10. März 2008, 20:49

Ä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?)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 10. März 2008, 20:53

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))
My god, it's full of CARs! | Leonidasvoice vs Modvoice
kurvenschubser
User
Beiträge: 15
Registriert: Montag 10. März 2008, 01:49
Wohnort: Berlin

Beitragvon kurvenschubser » Montag 10. März 2008, 21:04

Die Werte (außer den Noten) waren als Beispiel gedacht.
Ich habe eine Liste mit der Häufigkeit der Noten.
In anteile[i] soll stehen:

häufigkeit von note[i] geteilt durch Gesamtanzahl der Noten.

In kumulanteile[i] soll dann stehn:

kumulanteile[i] = kumulanteile[i-1] + anteile[i]

Ich werde erst mal mit Hyperions Tip weitermachen...

MfG
kurvenschubser
User
Beiträge: 15
Registriert: Montag 10. März 2008, 01:49
Wohnort: Berlin

Wg. auffüllen mit Nullen

Beitragvon kurvenschubser » Donnerstag 13. März 2008, 20:29

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=]
anteile = [0]*11
for y in range(1, 12, 1):
anteile[y-1] = float(notenliste[y]) / teilnehmernr[/code]

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

Beitragvon BlackJack » Donnerstag 13. März 2008, 21:48

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]

Wer ist online?

Mitglieder in diesem Forum: mollyman