eleganter Weg 2 Listen zu vergleichen

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.
Benutzeravatar
leoel
User
Beiträge: 36
Registriert: Dienstag 25. Mai 2004, 08:54
Wohnort: Graz

eleganter Weg 2 Listen zu vergleichen

Beitragvon leoel » Dienstag 21. Dezember 2004, 08:48

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Dienstag 21. Dezember 2004, 08:57

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
Benutzeravatar
leoel
User
Beiträge: 36
Registriert: Dienstag 25. Mai 2004, 08:54
Wohnort: Graz

Beitragvon leoel » Dienstag 21. Dezember 2004, 09:09

Super, genau das habe ich gesucht

Danke
lg Leo
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Dienstag 21. Dezember 2004, 14:40

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))

Code: Alles auswählen

#!/usr/bin/env python
import this
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Dienstag 21. Dezember 2004, 15:25

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]