Liste append und += kombinieren

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
dcea172
User
Beiträge: 5
Registriert: Freitag 10. Februar 2023, 22:42

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
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14065
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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']
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten