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

elemt aus liste löschen

Beitragvon RainerUnsinn » Freitag 16. Januar 2009, 12:58

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

Beitragvon polypus » Freitag 16. Januar 2009, 13:09

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

Beitragvon Craven » Freitag 16. Januar 2009, 13:10

Code: Alles auswählen

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

:)

Edit: Verdammt ...

Code: Alles auswählen

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

Beitragvon RainerUnsinn » Freitag 16. Januar 2009, 13:14

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

Beitragvon numerix » Freitag 16. Januar 2009, 13:24

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

Beitragvon yipyip » Freitag 16. Januar 2009, 13:28

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

Beitragvon RainerUnsinn » Freitag 16. Januar 2009, 13:38

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

Beitragvon audax » Freitag 16. Januar 2009, 15:41

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

Beitragvon yipyip » Freitag 16. Januar 2009, 16:37

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder