doppelte Einträge in einer Liste löschen

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
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

Hallo, wieder eine Frage:

wie kann ich in einer Liste Einträge, die doppelt vorhanden sind löschen, sodass jeder Eintrag nur noch 1x vorkommt?
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Code: Alles auswählen

list(set(original_list))
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Wobei, lieber so:

Code: Alles auswählen

sorted(set(original_list), key=original_list.index)
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

Code: Alles auswählen


neue_liste3=(set(neue_liste2), key=neue_liste2.index)

print neue_liste3

gibt mir die Fehlermeldung: invalid syntax, list objects are unhashable
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

Code: Alles auswählen

neue_liste3=sorted(set(neue_liste2), key=neue_liste2.index)

print neue_liste3
so sieht mein Code natürlich aus, hatte vorhin noch das sorted vergessen
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Der Fehler hat einen ganz einfachen Grund: Du kannst Listen nicht in eine Menge packen, da diese veränderbar sind.

Statt der Menge könntest du einfach eine weitere Liste verwenden, in welche du alle bereits verwendeten Elemente eingefügt hast.

Code: Alles auswählen

>>> l = [[1], [2], [4], [1], [5], [2], [1]]                                
>>> x = []
>>> n = []
>>> for e in l:
...     if e not in x:
...         n.append(e)
...         x.append(e)
... 
>>> n
[[1], [2], [4], [5]]
Das Leben ist wie ein Tennisball.
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

und ich sollte eventuell dazu sagen, dass meine Liste aus Tupeln besteht mit mehreren Einträgen, im speziellen Fall X-, Y-, Z-Koordinate:

Liste = [ [XYZ1], [XYZ2], [XYZ3], [XYZ1],... ]
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Michi_J hat geschrieben:und ich sollte eventuell dazu sagen, dass meine Liste aus Tupeln besteht mit mehreren Einträgen, im speziellen Fall X-, Y-, Z-Koordinate:

Liste = [ [XYZ1], [XYZ2], [XYZ3], [XYZ1],... ]
In diesem Fall solltest du als innere Datenstruktur lieber Tupel verwenden (da die Anzahl mit 3 ja fix ist). Dann funktioniert auch oben genanntes Beispiel.

Code: Alles auswählen

In [6]: l = [(1,2), (3,4), (5,6), (1,2)]

In [7]: sorted(set(l), key=l.index)
Out[7]: [(1, 2), (3, 4), (5, 6)]
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

ich habs jetzt so probiert, wie EyDu gesagt hat, hat auch geklappt...
Wie würde es denn mit dem sorted-Befehl funktionieren?
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Michi_J hat geschrieben:ich habs jetzt so probiert, wie EyDu gesagt hat, hat auch geklappt...
Wie würde es denn mit dem sorted-Befehl funktionieren?
siehe oben
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wenn du unveränderliche Objekte hast, dann hätte ich auch noch eine "Lösung":

Code: Alles auswählen

>>> l = [1,2,4,6,2,8,3,5,1,5,1]
>>> x = {}
>>> [x.setdefault(v, v) for v in l if v not in x]
Das Leben ist wie ein Tennisball.
Michi_J
User
Beiträge: 110
Registriert: Samstag 7. August 2010, 08:35

@ms4py: habs erst grad gesehen, klappt auch. Herzlichen Dank!
BlackJack

@jbs: Die `sorted()`/`index()`-Lösung braucht man nur, wenn die Reihenfolge erhalten bleiben muss, und selbst dann ist sie IMHO sehr unschön, da sie quadratische Laufzeit hat. Das geht auch besser.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

BlackJack hat geschrieben:@jbs: Die `sorted()`/`index()`-Lösung braucht man nur, wenn die Reihenfolge erhalten bleiben muss, und selbst dann ist sie IMHO sehr unschön, da sie quadratische Laufzeit hat. Das geht auch besser.
Alles klar. Eydus Lösung sieht da schöner aus.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Antworten