2016-07-28 10 views
-2

Ich habe eine Liste von SätzenPythonic Art und Weise zu überprüfen, ob ein Satz in der Liste in einem anderen Satz ist

lst = [s1, s2, s3] 

wo

s1 = set([1, 2, 3]) 
s2 = set([2, 3, 4]) 
s3 = set([2, 4, 6]) 

und ich habe einen anderen Satz

set1 = set([1, 2, 3, 5]) 

Also wenn ich lst - set1 mache, sollte ich set() bekommen. Eine Möglichkeit, dies zu tun, besteht darin, jedes Element von lst durchzugehen und dann mit set1 minus zu machen. Ich möchte wissen, ob es eine pythonische Art gibt, dies zu tun.

Beispiel:

s1 = set([1, 2, 3, 4]) 
s2 = set([2, 3, 4]) 
s3 = set([2, 4, 6]) 

lst = [s1,s2,s3] 

set1 = set([1, 2, 3, 5, 4]) 

Also muß ich überprüfen, ob eine des Elements in der Liste lst vorhanden ist in set1

+2

unklar, was die erwartete Ausgabe ist –

+0

'lst - set1' ist einfach undefiniert. Sie können nicht zwischen "Liste" und "Menge" unterscheiden. Möchten Sie eine * element weise * Differenz, d. H. '[Teilmenge - set1 für Teilmenge in lst]' '? Oder sollte die gesamte Liste als Flat-Set interpretiert werden? – MisterMiyagi

+2

Sollte 'lst - set1' nicht' {4,6} 'sein? –

Antwort

0

Um eine Liste der Unterschiede zwischen den Sätzen erhalten Sie einen list comprehension nutzen könnten.

my_set = set([1, 2, 3, 5]) 

set_list = [ 
    set([1, 2, 3]), 
    set([2, 3, 4]), 
    set([2, 4, 6]), 
] 

# find differences between sets in list and my_set, remove empty sets 
[set_item - my_set for set_item in set_list if set_item - my_set] 
# returns [set([4]), set([4, 6])] 

# to return only empty sets 
[set_item - my_set for set_item in set_list if not set_item - my_set] 

Die Liste Verständnis Schleifen über Ihre Liste von Sätzen for set_item in set_list. Es stellt dann sicher, dass das Ergebnis nicht leer if set_item - my_set ist. Schließlich gibt es das Ergebnis set_item - my_set auf der linken Seite der Anweisung zurück.

+0

Ich möchte nur überprüfen, ob das in der Liste vorhandene Set vom anderen Set abgedeckt werden kann. Obwohl ich die obigen Ergebnisse erhalten werde, bin ich mehr daran interessiert, das Ergebnis von set() zu sehen. Eine Möglichkeit besteht darin, das Element in der Liste durchzuschleifen und einzeln zu prüfen, aber ich wollte nur wissen, ob es irgendeine Art von Pythonie gibt. – tanay

+0

Genau das macht ein Listenverständnis. Es durchläuft Listen und ermöglicht Ihnen einfache Prüfungen oder Transformationen an den Elementen. Welcher Teil meiner Antwort ist nicht, Ihnen die Ergebnisse zu geben, die Sie wollen? – Soviut

+0

Ich musste nach leeren Sets suchen und das zweite Beispiel macht das.Ich möchte wissen, ist Listen Verständnis schneller als die native Technik (Schleifen durch die Elemente in der Liste und dann die Überprüfung der Differenz eins nach dem anderen) – tanay

1

Sie können den in Operator verwenden. Es funktioniert mit jedem Array-ähnlichen Container, einschließlich Listen, Tupeln, Mengen und Wörterbuchschlüsseln.

set_list = [set(1, 2, 3), set(2, 3, 4), set(2, 4, 6)] 

# returns True 
set([1,2,3]) in set_list 

# returns False 
set([5, 6, 7]) in set_list 

# returns False, just to show that types must match 
[1, 2, 3] in set_list 
+0

Mein Set1 hat mehr Elemente, so wird dies geben False – tanay

+0

was ist mit s1 = set ([1, 2, 3,4]) s2 = set ([2, 3 , 4]) s3 = set ([2, 4, 6]) LST = [s1, s2, s3] SET1 = set ([1, 2, 3,5,4]) set1 in lst ..... Es gibt False wo ich gerne True haben möchte – tanay

+3

Sie müssen erklären, was Sie erwarten, ein positives Ergebnis in Ihrer Frage zu sein. – Soviut

Verwandte Themen