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
Hilfe bei Liste-Programm
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.
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.
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.
Dann stimmt die Reihenfolge zwar nicht mehr, aber das stört mich nicht.

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]
>>>
Alles was wir sind ist Sand im Wind Hoschi.