Listen-Kopien

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
Twantie
User
Beiträge: 10
Registriert: Mittwoch 18. Dezember 2019, 09:24

Guten Mittag miteinander,

ich habe folgendes Problem:
ich möchte eine bereits existierende Liste namens "liste" auf drei verschiedene Variablen kopieren, um diese danach separat zu bearbeiten.
dies habe ich gemacht mit:

Code: Alles auswählen

d_anzahl = liste.copy()
a_anzahl = liste.copy()
i_anzahl = liste.copy()
folgendes habe ich auch schon probiert:

Code: Alles auswählen

d_anzahl = liste[:]
a_anzahl = liste[:]
i_anzahl = liste[:]
Nun möchte ich aus jeder der drei neuen Listen jeweils andere Elemente entfernen.
Für die erste Liste habe ich es folgendermaßen gemacht:

Code: Alles auswählen

for element in d_anzahl:
     del element[0]
     del element[3:9]
Dies hat auch wunderbar funktioniert, allerdings wurden mit dieser for-Schleife auch meine ursprüngliche Liste, sowie die beiden anderen Kopien auch geändert, sodass ich diese nicht mehr verwenden kann. Wie bekomme ich "richtige" Kopien von der Liste, welche sich nicht mitverändern?

Grüße
Twantie
Benutzeravatar
Felix92
User
Beiträge: 133
Registriert: Mittwoch 7. November 2018, 17:57

Huhu Twantie,
from copy import deepcopy
sollte dir weiterhelfen.
MfG Felix
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Das sind schon Kopien der Liste. Sogenannte flache Kopien.
Die Frage ist, was die Elemente deiner Liste sind.

Code: Alles auswählen

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> b = a.copy()
>>> c = a[:]
>>> del a[0]
>>> a
[2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> b
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> c
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Twantie: Das vorgehen ist falsch oder zumindest ungewöhnlich. Mach keine Kopien die Du danach veränderst und lösche nichts aus Listen, sondern baue neue Listen auf, ohne die Elemente die Du nicht haben möchtest. Also möglichst keine vorhandenen Listen verändern, sondern immer nur neue erstellen.

Edit: Für das Beispiel also so:

Code: Alles auswählen

d_anzahl = [element[1:4] + element[10:] for element in liste]
Wobei die Namen schlecht sind. Irgendwelche einbuchstabigen Präfixe sind nicht genug.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Twantie
User
Beiträge: 10
Registriert: Mittwoch 18. Dezember 2019, 09:24

Danke für die Antworten, haben mir sehr geholfen!
Antworten