Seite 1 von 1

Liste append und += kombinieren

Verfasst: Freitag 17. Februar 2023, 16:51
von dcea172
Hi,

ich habe folgenden Code für einen Teil einer Aufgabe geschrieben.

Code: Alles auswählen

list = []

list2 = ["D 1 A", "A 2 B", "T 3 C"]
for x in list2:
    wert = x.split(" ")

    try:
        list[0] += (' ' * 4) + wert[0]
    except IndexError:
        list.append(wert[0])

    try:
        list[1] += (' ' * 4) + wert[1]
    except IndexError:
        list.append(wert[1])

    try:
        list[2] += (' ' * 4) + wert[2]
    except IndexError:
        list.append(wert[2])
print(wert)
print(list)
Das Try und Except habe ich gemacht um die Index Error auszunutzen, welche ich ansonsten immer bekommen habe.
Das Problem ist ja, dadurch das die Liste leer ist, kann kein Wert zu list[0] hinzugefügt werden.
Ich muss aber 1) Werte zu der leeren list[x] hinzufügen und dann auch noch 2) jeden Weiteren Wert zu dem erstellten index hinzufügen.

Aber so ganz gefällt mir das nicht, habt ihr da eine Idee wie man das anderweitig machen kann?
Auch mit

Code: Alles auswählen

if list[0] == ""
bekomme ich den gleichen Fehler.
Ich habe die Variablen etc angepasst, hoffe das ist so verständlich.

Vielen dank

Re: Liste append und += kombinieren

Verfasst: Freitag 17. Februar 2023, 17:01
von Sirius3
List ist ein schlechter Variablenname, weil er die eingebaute list-Klasse überdeckt. x ist ein schlechter Variablenname weil nicht sagen.
Man addiert keine Strings zusammen, sondern generiert erst eine Liste mit den gesplittet Werten, transponiert diese per zip jedoch generiert daraus per join eine Liste mit Strings.

Re: Liste append und += kombinieren

Verfasst: Freitag 17. Februar 2023, 22:59
von __blackjack__
Diese ganzen harten Indexwerte funktionieren ja auch nur solange die Eingabeliste aus drei Elementen besteht, die jeweils Zeichenketten enthält die in genau drei Teile aufgeteilt werden. So eine Lösung will man normalerweise nicht wenn man das generischer ohne irgendwelche magischen Zahlen lösen kann.

Code: Alles auswählen

In [274]: list(map("    ".join, zip(*(text.split() for text in ["D 1 A", "A 2 B", "T 3 C"]))))
Out[274]: ['D    A    T', '1    2    3', 'A    B    C']