elemt aus 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
RainerUnsinn
User
Beiträge: 3
Registriert: Freitag 16. Januar 2009, 12:51

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
polypus
User
Beiträge: 37
Registriert: Dienstag 27. September 2005, 14:11
Wohnort: Salzburg

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
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Code: Alles auswählen

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

Edit: Verdammt ...
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
RainerUnsinn
User
Beiträge: 3
Registriert: Freitag 16. Januar 2009, 12:51

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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:
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

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
RainerUnsinn
User
Beiträge: 3
Registriert: Freitag 16. Januar 2009, 12:51

super danke, genau das war es :D
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

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
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

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
Antworten