Seite 1 von 1
doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 19:22
von Michi_J
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?
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 19:25
von jbs
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 19:28
von jbs
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 19:39
von Michi_J
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
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 19:42
von Michi_J
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
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 19:47
von EyDu
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]]
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 19:52
von Michi_J
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],... ]
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 19:55
von ms4py
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)]
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 19:57
von Michi_J
ich habs jetzt so probiert, wie EyDu gesagt hat, hat auch geklappt...
Wie würde es denn mit dem sorted-Befehl funktionieren?
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 20:00
von ms4py
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
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 20:02
von EyDu
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]
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 20:02
von Michi_J
@ms4py: habs erst grad gesehen, klappt auch. Herzlichen Dank!
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 20:11
von 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.
Re: doppelte Einträge in einer Liste löschen
Verfasst: Donnerstag 19. August 2010, 20:46
von jbs
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.