Seite 1 von 1

Liste verändern

Verfasst: Mittwoch 23. September 2020, 14:44
von informatikstudent
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.

Re: Liste verändern

Verfasst: Mittwoch 23. September 2020, 14:53
von sparrow
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?

Re: Liste verändern

Verfasst: Mittwoch 23. September 2020, 15:02
von Sirius3
@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