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

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

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

Super, genau das habe ich gesucht

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

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]#!/usr/bin/env python
import this[/code]
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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
Antworten