Seite 1 von 1

eleganter Weg 2 Listen zu vergleichen

Verfasst: Dienstag 21. Dezember 2004, 08:48
von leoel
Hallo!

Hab schon ein bisschen gesucht, aber nix gefunden:
Ich suche einen eleganten Weg 2 Listen miteinander zu vergleichen, d.h ich will wissten ob alle Elemente der Liste a in der List b enthalten sind.

Bsp:

Code: Alles auswählen

a = [1, 4, 5, 2]
b = [1, 2, 3, 4, 5, 6, 7]
==> soll True ergeben

andernfalls:

Code: Alles auswählen

a = [0, 2, 1]
b = [1, 2, 3, 4, 5, 6, 7]
==> soll False ergeben?

Doppelte Einträge kommen in den Listen nicht vor. Die Reihenfolge in den Listen spielt für den Vergleich keine Rolle, für später aber schon. Das sag ich nur deshalb weil hab gestern probiert eine Abkürzung über sort() zu nehmen, aber selbst wenn ich sage:

Code: Alles auswählen

a = [1, 4, 5, 2]
c = a
c.sort()
wird a auch sortiert (und dann kann ich die Liste nicht mehr verwenden).

Gibt es einen eleganteren Weg als für jedes Element in a alle Elemente in b zu durchlaufen?

Danke, Leo

Verfasst: Dienstag 21. Dezember 2004, 08:57
von mawe
Hi!

Mit sets geht das recht einfach:

Code: Alles auswählen

>>> set(a).issubset(set(b))
True
Für Python < 2.4 musst noch from sets import Set und dann eben Set verwenden.

Gruß, mawe

Verfasst: Dienstag 21. Dezember 2004, 09:09
von leoel
Super, genau das habe ich gesucht

Danke
lg Leo

Verfasst: Dienstag 21. Dezember 2004, 14:40
von Dookie
Hi leoel,

hier mal eine Version für Python2.x.

Code: Alles auswählen

if not hasattr(__builting__, "set"): # Pythonversion < 2.4 ?
    from sets import Set as set

set(a).issubset(set(b))

Verfasst: Dienstag 21. Dezember 2004, 15:25
von Milan
Hi. Ich würde nochmal nachhaken: in den Listen, die du vergleichen willst dürfen keine Dcitionarys oder Listen oder andere Sets enthalten sein, denn diese sind mutable und somit würde es einen Fehler geben. Ich würde daher um auf Nummer sicher zu gehen lieber so vergleichen:

Code: Alles auswählen

def compare(a,b):
    for i in a:
        if i not in b:
            return False
    return True