Seite 1 von 1

alle gleichen elemente aus liste löschen

Verfasst: Samstag 22. Januar 2005, 15:51
von Gast
Hallo,
ich habe ein wirklich triviales Problemchen.

Ich habe eine Liste und will eine Elemente das mehrmals vorkommt löschen.

Die Funktion remove löscht aber nur immer das erste Element und eine for-Schleife über alle Elemente laufen zu lassen udn immer remove aufzurufen finde ich ist höchst ineffizient.
Gibt es keinen anderen Weg???

Danke

Verfasst: Samstag 22. Januar 2005, 16:07
von XT@ngel
Meinst du sowas hier:
http://python.sandtner.org/viewtopic.php?t=93

MfG
Andreas

Verfasst: Samstag 22. Januar 2005, 16:20
von Gast
super andreas,
vielen Dank!!!

Wie immer exzellent super schnelle und effiziente Hilfe in diesem Forum!!!

Danke

Verfasst: Samstag 22. Januar 2005, 16:35
von Milan
Ich glaube ich hab noch einen Tipp für's nächste mal: hier. Der funktioniert manchmal noch schneller :wink: :lol:

Verfasst: Samstag 22. Januar 2005, 16:36
von Gast
ah,
hi nochmal ich,
leider doch nicht soooo ganz das was ich suche.

Wenn ich ne Liste habe
list = ["A","H","A","T","B","A"]

will ich nur alle A's löschen und die Sortierung soll erhalten bleiben also sollte rauskommen:
redlist = ["H","T","B"]

vielleicht kann mir einer helfen?

Dangöö

Verfasst: Samstag 22. Januar 2005, 17:27
von Milan
Hi. Dann musst du eben zuerst feststellen, ob ein Element mehrfach auftaucht und es dann löschen. Das kann man machen, während man die Liste durchgeht und falls man ein doppetes findet es wieder rausnehmen:

Code: Alles auswählen

def f(iterable):
    erg=[]
    mehrfach=[]
    for el in iterable:
        if el in mehrfach:
            continue
        elif el in erg:
            erg.remove(el)
            mehrfach.append(el)
            continue
        else:
            erg.append(el)
    return erg
Damit führe ich eine schwarze Liste, ob ein Element mehrfach vorkommt und gehe dementsprechd vor, wenn ich alle neuen Elemente zusammenstelle.

Verfasst: Samstag 22. Januar 2005, 19:36
von Dookie
Hi,

Code: Alles auswählen

def remove_all(l, x):
    while x in l:
        l.remove(x)
oder falls die alte Liste erhalten bleiben soll:

Code: Alles auswählen

l = ["A","H","A","T","B","A"]
redlist = [for x in l if x != "A"]

Gruß

Dookie

Verfasst: Samstag 22. Januar 2005, 19:51
von Gast
peinlich,
darauf hätte man auch von selbst kommen können....

Trotzdem vielen DANK!