Seite 1 von 1

IndexError: list index out of range ?

Verfasst: Donnerstag 12. September 2019, 18:12
von hm0199
Hallo!

Ich habe ein Problem mit einer Fehlermeldung und würde mich sehr über schnelle Hilfe freuen.
Ich habe mich zur Übung an den Code aus dem Youtube Video https://www.youtube.com/watch?v=jOmEO0G5xIc gesetzt. Allerdings kann ich die Datei nicht ausführen, als Fehlermeldung gibt Python (Spyder als Editor).

Code: Alles auswählen

laenge = [zeile[1] for zeile in tabelle]

IndexError: list index out of range

Woran könnte das liegen? Mein Code ist unten aufgeführt und entspricht dem des Youtube-Videos, dort funktioniert er allerdings.

Vielen Dank im Voraus!

Code: Alles auswählen

import matplotlib.pyplot as plt

dateihandler = open('abalone.data')

inhalt = dateihandler.read()

zeilen = inhalt.split('\n')

tabelle = []

for zeile in range(len(zeilen)):
    spalten = zeilen[zeile].split(',')
    tabelle.append(spalten)
    tabelle[zeile][1:] = [float(zahl) for zahl in tabelle[zeile][1:]] 

laenge = [zeile[1] for zeile in tabelle]
hoehe = [zeile[3] for zeile in tabelle]

plt.scatter(laenge, hoehe)
plt.show()

Re: IndexError: list index out of range ?

Verfasst: Donnerstag 12. September 2019, 18:50
von __deets__
Dann schau dir doch mal an mit print was in der Tabelle ist.

Und wenn der Code stellvertretend für die Qualität dieses Kurses steht - dann solltest du etwas anderes suchen. Das ist ziemlich unterirdisch.

Re: IndexError: list index out of range ?

Verfasst: Donnerstag 12. September 2019, 18:57
von hm0199
In der Tabelle stehen alle Werte des Datensatzes.
Ich schaue mir mehrere Kurse an :) aber diese Fehlermeldung stört mich einfach, würde gerne die Ursache wissen

Re: IndexError: list index out of range ?

Verfasst: Donnerstag 12. September 2019, 19:21
von __deets__
Hast du gemacht was ich vorgeschlagen habe? Dir den Inhalt der Variablen anzeigen lassen? Wie sieht das aus?

Re: IndexError: list index out of range ?

Verfasst: Donnerstag 12. September 2019, 19:32
von Sirius3
@hm0199: Dateien, die man öffnet, sollte man auch wieder schließen, am besten mit dem with-Statement.
Statt eine Datei komplett zu lesen, iteriert man in Python über die Zeilen des Dateiobjekts.
Was noch schlimmer ist, ist einen Index in einer for-Schleife zu benutzen, statt direkt über die Elemente der Liste zu iterieren. Warum fügst Du erst `spalten` als Liste von Strings `tabelle` hinzu, um dann das Element wieder zu lesen und mit einem neuen Inhalt zu überschreiben? Verquerer geht es kaum.

Code: Alles auswählen

with open('abalone.data') as zeilen:
    tabelle = []
    for zeile in zeilen:
        spalten = zeile.split(',')
        tabelle.append([spalten[0]] + list(map(float, spalten[1:])))
Da es sich offensichtlich um eine CSV-Datei handelt, wäre das csv-Modul zum Lesen besser, oder Pandas oder Numpy.

Zum IndexError: Es gibt offensichtlich mindestens eine Zeile in der Datei, die aus weniger als zwei Spalten besteht. Das `split('\n')` produziert immer eine leere Zeile ganz am Ende. Was ein weiterer Grund ist, dass das halbe Programm Murx war.

Re: IndexError: list index out of range ?

Verfasst: Donnerstag 12. September 2019, 20:58
von hm0199
@Sirius3: Vielen Dank für die ausführliche Hilfe. Ich verstehe jetzt wo der Fehler liegt, und sehe auch ein, dass es wohl deutlich bessere Varianten gibt :). Warum es bei dem Ersteller des Videos funktioniert, ist mir ein einziges Rätzel... danke!