Seite 1 von 1
Problem mit Listen
Verfasst: Donnerstag 9. Mai 2013, 20:27
von djangofish
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?
Hier die Schleife:
Code: Alles auswählen
codeList = ['BA3','BB9','BC6']
for l in listB:
if l[23]:
for code in codeList:
l[6] = '+P' + code
listA.append(l)
Vielen Dank
Peter
Re: Problem mit Listen
Verfasst: Donnerstag 9. Mai 2013, 20:44
von snafu
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...
Re: Problem mit Listen
Verfasst: Donnerstag 9. Mai 2013, 20:49
von BlackJack
@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.
Re: Problem mit Listen
Verfasst: Donnerstag 9. Mai 2013, 21:26
von djangofish
Ich komm nicht auf die Lösung. Wie wäre es denn nun richtig?
Re: Problem mit Listen
Verfasst: Donnerstag 9. Mai 2013, 21:49
von snafu
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.
Re: Problem mit Listen
Verfasst: Donnerstag 9. Mai 2013, 21:56
von djangofish
Danke!
So gehts wohl. Wieder was gelernt.... copy quasi:)
Code: Alles auswählen
for l in listB:
if l[23]:
for code in codeList:
la = copy.copy(l)
la[6] = '+P' + code
listA.append(la)