Hilfe bei Liste-Programm

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
LN1289
User
Beiträge: 2
Registriert: Freitag 18. Dezember 2020, 15:48

Hallo, ich möchte Duplikate aus einer Liste von Nummern entfernen. Dazu habe ich folgenden Code geschrieben:

numbers = [2, 5, 5, 5, 6, 0, 1, 2, 2, 2, 3, 4, 4, 5, 5, 6, 6]

for i in numbers:
if numbers.count(i) > 1:
numbers.remove(i)

print(numbers)


Als Ergebnis bekomme ich:
[5, 0, 1, 2, 3, 4, 5, 5, 6]

Es werden also einige Zahlen die doppelt vorkommen nicht entfernt. Warum?

Vielen Dank.
Viele Grüße,
LN1289
narpfel
User
Beiträge: 691
Registriert: Freitag 20. Oktober 2017, 16:10

Moin,

du darfst im Allgemeinen eine Liste, über die du gerade iterierst, nicht verändern. Erstelle stattdessen eine neue Liste, in die du die gewünschten Werte einfügst. Eventuell hilft auch `collections.Counter`.

Hintergrund: Die `for`-Schleife benutzt einen Iterator, um über die Liste zu iterieren. Dieser Iterator merkt sich die Position in der Liste des nächsten Elements, das er liefern soll. Wenn du jetzt die Liste veränderst, hat der Iterator keine Möglichkeit, das mitzubekommen und dementsprechend passt die Position dann nicht mehr. Ergebnis: Entweder überspringst du Elemente, oder du bekommst Elemente doppelt.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Man darf keine Elemente aus einer Liste löschen, über die gerade iteriert wird.
Man ändert auch keine Listen, sondern erzeugt am besten eine neue.
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Ich traue mir das fast nicht zu schreiben, aber wenn ich das mal brauche, dann erstelle ich der Einfacht wegen mit set() eine neue Liste. :oops:

Code: Alles auswählen

>>> numbers = [2, 5, 5, 5, 6, 0, 1, 2, 2, 2, 3, 4, 4, 5, 5, 6, 6]
>>> new_list = list(set(numbers))
>>> print(new_list)
[0, 1, 2, 3, 4, 5, 6]
>>> 
Dann stimmt die Reihenfolge zwar nicht mehr, aber das stört mich nicht.
Alles was wir sind ist Sand im Wind Hoschi.
LN1289
User
Beiträge: 2
Registriert: Freitag 18. Dezember 2020, 15:48

Ok, alles klar, ich erstelle eine neue Liste.
Danke vielmals !
Antworten