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.
Ich möchte einen Eintrag der in 'listB' gepeichert ist, mehrmals kopieren und an eine andere Liste anfügen. Für jeden Code aus 'codeList' soll eine Zeile erstellt und dabei der Code in eine Spalte geschrieben werden.
Leider haben alle alle erstellten Einträge mit den selben Code in der Spalte, nämlich den letzten "BC6". Woran liegt es?
Naja, du überschreibst die Spalte in `l[6]` (also exakt die selbe Stelle) halt nacheinander mit allen Werten aus `codeList`. Übrig bleibt dementsprechend der letzte Wert. Und den bekommst du angezeigt.
Python fügt nicht selbständig mehrere Werte hintereinander, wenn man die selbe Stelle mehrmals beschreibt, sondern der vorherige Wert wird durch den neuen Wert sozusagen stillschweigend ersetzt.
Um das nochmal anders zu sagen: Deine innere Schleife arbeitet durchgehend mit dem `l`, welches durch die äußere Schleife im jeweils aktuellen Iterationsschritt definiert wird. Im vorliegenden Beispiel wird also in der inneren Schleife dreimal irgendwas mit dem aktuellen `l` gemacht, dann folgt der nächste Iterationsschritt der äußeren Schleife, welcher ein neues `l` definiert und dieses neue `l` wird wiederum von der inneren Schleife dreimal benutzt, dann definiert die äußere Schleife wieder einen neuen Wert für `l`, etc...
Zuletzt geändert von snafu am Donnerstag 9. Mai 2013, 20:51, insgesamt 1-mal geändert.
@djangofish: Und an `listA` hängst Du potentiell *mehrfach* die *selbe* Liste an, die gerade an `l` gebunden ist. Auch an der Stelle wird nicht auf magische Weise eine Kopie erstellt.
Wenn ich dein Vorhaben richtig verstehe, dann musst du in der inneren `for`-Schleife eine Kopie von `l` erstellen, in dieser Kopie am gewünschten Indexwert den im jeweiligen Durchlauf aktuellen `code` reinschrieben und die Kopie dann an deine andere Liste dranhängen.
Kopieren geht entweder mittels Übergabe der zu kopierenden Liste an `list()` oder mittels Slicing (`l[:]`). Falls dir das Probleme bereitet, solltest du ggf mal das offizielle Python-Tutorial durcharbeiten.