2016-04-07 19 views
0

Ich arbeite an einem Programm, in dem ich jedes Element eines Satzes (aus einer Liste von Sätzen) prüfen und es mit einem 'Haupt' Satz vergleichen und dann den Satz an eine Liste wenn mindestens ein einzelnes Element anhängen muß der beiden Sätze übereinstimmen.Problem Vergleicht Elemente von Sets (Python)?

Ich habe versucht, dieses Problem wie eine Liste anzugreifen, nur um zu erkennen, dass Indexierung nicht funktioniert auf Sets.

Ex von dem, was ich zu erreichen bin versucht:

newlist = [] 
i = set([5, 3, 1]) # <-- 'Master' Set 
z = set([5, 0, 4]) 

#Output should be -> newlist = [set([5,0,4])] 
+0

Für zukünftige Referenz ist die 'set' Dokumentation [hier] (https://docs.python.org/2/library/stdtypes.html#set-types-set-frozenset). (Es kommt leider nicht bei Google auf.) – user2357112

Antwort

1

z Angenommen ist Liste der Sätze wie in Ihrer Frage Beschreibung, aber nicht in Ihrem angebrachten Schnipsel.

newlist = [x for x in z if not i.isdisjoint(set(x))] 
# or newlist = [x for x in z if i.intersection(set(x))] 

Live demo

+0

'not x.isdisjoint (i)' lässt Sie das Erstellen eines Schnittmengensatzes vermeiden. – user2357112

+0

@ user2357112 Danke! – timrau

+0

Hm ... Rückgabe AttributeError: 'Liste' Objekt hat kein Attribut 'Kreuzung' –

0

Sie eine Kombination von Schnitt verwenden können und setzen dieses Problem zu lösen:

>>> s1 = set([1,2,3]) 
>>> s2 = set([3,4,5]) 
>>> s3 = set([6,7,8]) 
>>> len(s1.intersection(s2)) 
1 
>>> len(s1.intersection(s3)) 
0 

Also im Grunde schreiben eine if-Anweisung die Länge der Schnittpunkt der beiden zu überprüfen Sätze. Wenn die Länge größer als 0 ist, machen Sie newlist gleich Ihrem zweiten Satz.

Verwandte Themen