IndexError: list 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.
Antworten
hm0199
User
Beiträge: 3
Registriert: Donnerstag 12. September 2019, 18:04

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()
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
hm0199
User
Beiträge: 3
Registriert: Donnerstag 12. September 2019, 18:04

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
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du gemacht was ich vorgeschlagen habe? Dir den Inhalt der Variablen anzeigen lassen? Wie sieht das aus?
Sirius3
User
Beiträge: 17753
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
hm0199
User
Beiträge: 3
Registriert: Donnerstag 12. September 2019, 18:04

@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!
Antworten