Listen bearbeiten

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
Toxic
User
Beiträge: 2
Registriert: Mittwoch 10. Juni 2020, 23:20

Hallo,

aktuell versuche ich eine Liste mit mehreren Listen als inhalt zu erstellen und mir dann untereinander ausgeben zu lassen.
Da funktioniert auch soweit alles. Nur habe ich das Problem, sobald ich den ersten Eintrag in der ersten Liste ändern möchte, wird der erste Eintrag aus allen Listen geändert.
Hoffentlich könnt ihr mir einen Tipp geben warum das so ist, und wie ich das am besten umgehen kann.

Vielen Dank!

Code: Alles auswählen

hoehe = 5
breite = 5


liste1 = []
breite2 = []

for i in range(breite):
    breite2.append(0)

for i in range(hoehe):
    liste1.append(breite2)


liste1[0][0] = 1
print_reihe = 0

for x in liste1:
    print(liste1[print_reihe])
    print_reihe += 1
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Toxic: Es wird nicht der Eintrag von allen Listen geändert, denn das ist nur *eine* Liste, die Du da halt 5 mal in `liste1` steckst. Du musst da jeweils eine *neue* Liste erzeugen wenn Du 5 verschiedene Listen haben willst.

Der Code geht mit Multiplikation von Listen mit ganzen Zahlen und einer „list comprehension“ auch deutlich kompakter. Und die Schleife am Ende ist übermässig kompliziert. Warum hast Du da dieses `print_reihe` und machst gar nichts mit dem `x`? Das sollte man auch sinnvoller benennen. Die komischen Nummernanhängsel bei den Namen für die Listen haben da auch nichts verloren.

Code: Alles auswählen

#!/usr/bin/env python3

HOEHE = BREITE = 5


def main():
    reihen = [[0] * BREITE for _ in range(HOEHE)]

    reihen[0][0] = 1

    for reihe in reihen:
        print(reihe)


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Toxic
User
Beiträge: 2
Registriert: Mittwoch 10. Juni 2020, 23:20

Vielen Dank für die Hilfe und Kritik. Ich werde versuchen genauer und nach Möglichkeit nicht nummeriert zu benennen.
Bisher war ich der Meinung das er mit *.append die Werte an das Ende der Liste kopiert und diese dann unabhängig sind.

MIt freudlichen Grüßen,
Toxic
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Kopiert wird in Python nie einfach so. Sonst könnte man ja nie ein Objekt verändern, wenn es ständig Kopien davon geben würde.
Antworten