Seite 1 von 1

Listen bearbeiten

Verfasst: Mittwoch 10. Juni 2020, 23:51
von Toxic
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

Re: Listen bearbeiten

Verfasst: Donnerstag 11. Juni 2020, 09:08
von __blackjack__
@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()

Re: Listen bearbeiten

Verfasst: Samstag 13. Juni 2020, 23:42
von Toxic
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

Re: Listen bearbeiten

Verfasst: Sonntag 14. Juni 2020, 11:58
von Sirius3
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.