2016-04-07 39 views
0

Bir kümenin her elemanını (setler listesinden) kontrol etmem ve bir 'master' setiyle karşılaştırıp sonra en az bir elemanın varsa listeye eklemem gereken bir program üzerinde çalışıyorum. iki setin eşleşmesi.Sorun Çözme Elemanları (Python)?

Bu sorun, yalnızca dizin oluşturma işleminin kümeler üzerinde çalışmadığını anlamak için bir liste gibi saldırmaya çalıştım. Ben başarmak ne çalışıyorum

Ör:

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

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

Gelecekte başvurmak için, 'set' belgelerine [burada] (https://docs.python.org/2/library/stdtypes.html#set-types-set-frozenset). (Maalesef Google’da bulunmuyor.) – user2357112

cevap

1

z varsayalım setleri Ekteki snippet'inizde soru açıklamasında gibi ancak listesi aşağıdadır.

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

'x.isdisjoint (i)' kesişim kümesi oluşturmamanızı sağlar. – user2357112

+0

@ user2357112 Teşekkürler! – timrau

+0

Hm ... AttributeError döndürür: 'list' nesnesi 'intersection' özniteliği yoktur –

0

Bu sorunu çözmek için kavşak bir arada kullanın ve ayarlayabilirsiniz: deyim ikisinin kesiştiği uzunluğunu kontrol etmek eğer Yani temelde

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

, bir yazma kümeler. Uzunluk, 0'dan büyükse, ikinci grubunuza yeni liste oluşturun.