Seite 1 von 1

elemt aus liste löschen

Verfasst: Freitag 16. Januar 2009, 12:58
von RainerUnsinn
hi,

ich versuche grad mir ein bisschen python beizubringen, was auch fast klappt.
nur hab ich jétzt eine frage:

und zwar würde ich gern ein algorhitmus schreiben, der ein element, was in einer liste mehrmals vorkommt, löscht. nur weiß ich nich sorecht wie ich das anstellen soll.
ich habe versucht das mit einer(bzw. zwei) for schleifen zu lösen, aber das klappt noch nicht so recht.
erstma meine schleifen:

Code: Alles auswählen

for x in liste[:]: 
        print x
        for c in liste [:]:
            if(liste.index(c)):
                print "Nein", x ,c
            else:
                liste.remove(c)
nun löscht es aber immer nur das erste element, aber ich will dass das element komplet aus der liste löscht(wenn a 4 mal vorkommt, soll es nach durchlaufen der liste gar nciht mehr vorkommen)
habt ihr mir da vlt. ein paar tipps?
grüße

Verfasst: Freitag 16. Januar 2009, 13:09
von polypus
Du kannst auch einfach set() benutzen. Ein set is eine Menge. Jedes Element darf nur einmal vorkommen.

Code: Alles auswählen

liste = [1,2,2,3,3,3,4,5,5]
s     = set(liste) #macht aus der Liste ein set  und enfernt die doppeleinträge
liste = list(liste) #macht das set wieder zu einer Liste 
print liste # sollte [1, 2, 3, 4, 5] ausgeben

Verfasst: Freitag 16. Januar 2009, 13:10
von Craven

Code: Alles auswählen

list(set([1, 2, 3, 2, 3, 3, 1, 4, 3, 7, 3, 1, 1, 1, 1]))
:)

Edit: Verdammt ...

Verfasst: Freitag 16. Januar 2009, 13:14
von RainerUnsinn
hey super danke,
aber so wie ich das sehe kommt das doppelte element in der liste dann noch einmal vor.
Ich hätte aber gern das es gar nicht mehr vorkommt und am besten zwei listen macht:
liste =[a,b,a,n]
liste1=[a]
liste2=[b,n]

grüße

Verfasst: Freitag 16. Januar 2009, 13:24
von numerix
RainerUnsinn hat geschrieben:hey super danke,
aber so wie ich das sehe kommt das doppelte element in der liste dann noch einmal vor.
Ich hätte aber gern das es gar nicht mehr vorkommt
Lies dir doch diesen Thread mal durch: http://www.python-forum.de/topic-16510.html

Das sollte weiter helfen. Ansonsten gilt: Ruhig mal die Forum-Suche bemühen ... :wink:

Verfasst: Freitag 16. Januar 2009, 13:28
von yipyip
Mit List Comprehensions:

Code: Alles auswählen

In [36]: ls = [1, 2, 3, 4, 3, 2, 2,]

In [37]: ls1 = [x for x in ls if ls.count(x) < 2]

In [38]: ls1
Out[38]: [1, 4]

In [39]: ls2 = list(set([x for x in ls if not x in ls1]))

In [40]: ls2
Out[40]: [2, 3]
:wink:
yipyip

Verfasst: Freitag 16. Januar 2009, 13:38
von RainerUnsinn
super danke, genau das war es :D

Verfasst: Freitag 16. Januar 2009, 15:41
von audax

Code: Alles auswählen

In [5]: ls = [1, 2, 3, 4, 3, 2, 2,]

In [6]: ls1 = [x for x in ls if ls.count(x) < 2]

In [7]: ls2 = list(set(ls) ^ set(ls1))

In [8]: ls
Out[8]: [1, 2, 3, 4, 3, 2, 2]

In [9]: ls2
Out[9]: [2, 3]

Meins hat O(n), deins hat O(n^2) :D

Verfasst: Freitag 16. Januar 2009, 16:37
von yipyip
ups, stimmt,
Python hat ja die typischen Set-Funktionen.
War mir in dem Moment gar nicht bewusst,
obwohl ich irgendwie in diese Richtung gedacht hatte.

Danke!

:wink:
yipyip