Liste verändern

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
informatikstudent
User
Beiträge: 2
Registriert: Donnerstag 3. September 2020, 09:48

Hallo ich habe eine Frage zu meinem Code. Ich verstehe leider nicht, warum er nicht funktioniert.

Code: Alles auswählen

def insert_start_token(x):
    if 0 in x:
        if x[x.index(0)+1]==0:
            if x[x.index(0)+2]==0:
                new_list=x.copy()
                new_list.insert("start",x.index(0))
                return new_list
            else:
                return x
        else:
            return x
    else:
        return x
Als Erläuterung: Er soll eine Liste auf Nullen untersuchen, und wenn 3 Nullen hintereinander sind, vor die erste Start schreiben.
Also so : [4,5,0,0,0,5,3,2,1] --> [4,5,'start',0,0,0,5,3,2,1]

Vielen Dank schon mal im Vorraus.
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Der Code wirft eine Ausnahme bei den Beispieldaten. Vielleicht solltest du in der Dokumentation noch einmal schauen, ob .insert() richtig verwendet wird.

Wie soll denn [4, 0, 5, 0, 0, 0, 5, 3, 2, 1] hinterher aussehen?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@informatikstudent: es wäre auch ganz hilfreich, die Fehlermeldung zu posten, die Du bekommst. Und anhand der Fehlermeldung und dem Nachlesen in der Dokumentation, wie man die entsprechende Methode verwendet, ist das Problem dann relativ leicht zu lösen.

Zum Code:
`x` ist ein sehr schlechter Name für eine Liste von Zahlen. Dass dann in der Rückgabe gar nicht mehr alle Elemente Zahlen sind, ist verwirrend. Was willst Du damit bezwecken?
Dass x.index drei mal berechent wird, ist Stromverschwendung.
Die tiefe Verschachtelung und die vielen returns machen den Code schwierig lesbar.
Dass Du erst schaust, ob eine 0 enthalten ist und dann die Position suchst, ist umständlich, da Du gleich nach der Position suchen könntest, und bei Bedarf die entsprechende Exception verarbeiten.

Code: Alles auswählen

def insert_start_token(elements):
    try:
        index = elements.index(0)
    except ValueError:
        # do nothing
        pass
    else:
        if elements[index:index+3] == [0,0,0]:
            elements = elements[:index] + ['start'] + elements[index:]
    return elements
Antworten