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
Sahin
User
Beiträge: 2
Registriert: Freitag 24. März 2023, 12:37

Hallo zusammen,

bin in Sachen Programmieren ein Neuling und hab ein Problem mit folgendem Code. Wenn ich es im Übungsprogramm laufen lasse, dann bekomme ich einen " list index out of range" fehler. Ansich tut die Codierung was es soll, aber das Indexing funktioniert anscheinend nicht und ich weiß nicht, warum.
Könnt Ihr helfen?
Danke.

Code: Alles auswählen


lst1=[]

def sublist(lst):
    new_lst=[]
    i=0

    while (lst[i]!=5 or i>=len(lst)):
        
        new_lst.append(lst[i])
        i+=1
    print(new_lst)
    return new_lst

lst1=[1,66,88,99,44,33,5,66,7,8]
print(sublist(lst1))

Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

"Codierung" ist etwas anders als ein "Code".
Man benutzt keine Abkürzungen, oder hängt Nummern Variablennamen. Eine Liste mit Werten (die nicht näher bestimmt sind) nennt man meist `values`.
Über einen Index iteriert man nicht, vor allem nicht mit einer while-Schleife. Das führt nur zu Problemen mit Indizes.
In Deinem Fall solltest Du schauen, welches der größte Wert ist, den `i` annehmen kann.

Der Code mit einer for-Schleife geschrieben, könnte so aussehen:

Code: Alles auswählen

def sublist(values):
    result = []
    for value in values:
        if value == 5:
            break
        result.append(value)
    return result

values = [1,66,88,99,44,33,5,66,7,8]
print(sublist(values))
Für das Problem, einen Wert in einer Liste zu suchen, gibt es aber schon eine passende Methode:

Code: Alles auswählen

def sublist(values):
    try:
        index = values.index(5)
    except ValueError:
        index = None
    return values[:index]

values = [1,66,88,99,44,33,5,66,7,8]
print(sublist(values))
Sahin
User
Beiträge: 2
Registriert: Freitag 24. März 2023, 12:37

Cool!! Vielen Dank für die sehr elegante Lösung.

Hab jetzt auch eine Lösung:

Code: Alles auswählen



def sublist(lst):
    new_lst=[]
    i=0
    while lst[i]!=5 or i>=len(lst):
        new_lst.append(lst[i])
        i+=1
        if i>=len(lst):
            return new_lst
    return new_lst

lst1=[1,66,88,99,44,33,5,66,7,8]
print(sublist(lst1))
    

Benutzeravatar
grubenfox
User
Beiträge: 432
Registriert: Freitag 2. Dezember 2022, 15:49

Sahin hat geschrieben: Freitag 24. März 2023, 12:46 Hallo zusammen,

bin in Sachen Programmieren ein Neuling und hab ein Problem mit folgendem Code. Wenn ich es im Übungsprogramm laufen lasse, dann bekomme ich einen " list index out of range" fehler. Ansich tut die Codierung was es soll, aber das Indexing funktioniert anscheinend nicht und ich weiß nicht, warum.
Könnt Ihr helfen?
Danke.

Code: Alles auswählen


lst1=[]

def sublist(lst):
    new_lst=[]
    i=0

    while (lst[i]!=5 or i>=len(lst)):
        
        new_lst.append(lst[i])
        i+=1
    print(new_lst)
    return new_lst

lst1=[1,66,88,99,44,33,5,66,7,8]
print(sublist(lst1))

kurze Anmerkung: bei dem "und ich weiß nicht, warum" müsste ich mich anschließen. Hier läuft der Code nämlich ohne Fehlermeldung erfolgreich durch.
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sahin: Nicht alles was funktioniert ist eine Lösung. Das ist komisch/umständlich und sieht extrem nach „herumgeraten bis es funktioniert“ aus. Ich würde da Nachfragen vom Lehrer erwarten und das Du das nicht wirklich erklären kannst was der Code macht, weil da auch Unsinniges drin steht.

@grubenfox: Auch wenn in der Liste *keine* 5 vorkommt?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
grubenfox
User
Beiträge: 432
Registriert: Freitag 2. Dezember 2022, 15:49

Dann gehe ich davon aus, dass es am Ende mit einem Index-Fehler knallt. Aber beim gegebenem Beispiel konnte ich mir nicht vorstellen wo da ein Index-Fehler auftreten sollte und habe den Code deswegen mal versuchsweise durchlaufen lassen. Hätte ja sein können dass ich was übersehe....
Antworten