Seite 1 von 1
Python einzelnes Listen element verändern
Verfasst: Sonntag 19. Februar 2023, 21:18
von n1klas
Hallo, vor kurzem habe ich etwas in Python festgestellt, was ich mir selber nicht so ganz erklären kann.
Code:
Ausgabe = [[1], [1], [1]]
Ich verstehe nicht so ganz, warum zu jeder Liste in der Liste die 1 hinzugefügt wird, obwohl man ja eigentlich mit
nur zur zweiten Liste etwas hinzufügt, ich hätte gedacht die Ausgabe sieht so aus:
Ausgabe = [[ ], [1], [ ]]
Kann mir das jemand erklären?
Liebe Grüße Niklas
Re: Python einzelnes Listen element verändern
Verfasst: Sonntag 19. Februar 2023, 21:22
von sparrow
etwas "list" zu nennen ist unglücklich, weil damit der interne Name "list" verdeckt wird.
Was vermutest du denn, was der erste Befehl tut?
Und worauf deutet das Verhalten hin, was er wirklich tut?
Übrigens fügst du nicht etwas zum ersten Element der Liste hinzu sondern zu dem zweiten.
Re: Python einzelnes Listen element verändern
Verfasst: Sonntag 19. Februar 2023, 21:29
von n1klas
Ich würde denken das ein normales Listenobjekt erzeugt wird, welches 3 weitere Listen Objekte enthält.
Re: Python einzelnes Listen element verändern
Verfasst: Sonntag 19. Februar 2023, 21:32
von sparrow
Wie das Verhalten zeigt, erstellt es eine Liste und tut diese Liste 3 Mal in eine andere Liste.
Es ist also 3 Mal die selbe Liste enthalten.
Das kann man auch relativ einfach prüfen:
Code: Alles auswählen
In [11]: containers = [[]] * 3
In [12]: for container in containers:
...: print(id(container))
...:
2898723980416
2898723980416
2898723980416
In [13]:
Re: Python einzelnes Listen element verändern
Verfasst: Sonntag 19. Februar 2023, 22:13
von n1klas
ahh verstehe, gibt es eine Möglichkeit eine Liste mit mehreren Listen zu erstellen, aber ohne das es sich um die gleichen Objekte Handelt?
Re: Python einzelnes Listen element verändern
Verfasst: Sonntag 19. Februar 2023, 22:20
von pillmuncher
@n1klas: Ja.
Code: Alles auswählen
>>> things = [[] for _ in range(3)]
>>> things
[[], [], []]
>>> things[1].append('hallo')
>>> things
[[], ['hallo'], []]
Siehe auch hier:
https://docs.python.org/3/tutorial/data ... rehensions.