In [10]:
import itertools

In [11]:
main =[]
main.append(sorted(['B','C', 'A' ,'F', 'H']))
main.append(sorted(['F', 'E', 'C', 'H']))
main.append(sorted(['E' ,'D', 'B']))
main.append(sorted(['A', 'C' ,'H', 'F']))
main.append(sorted(['E', 'F' ,'A']))
main.append(sorted(['D', 'H' ,'B']))
main.append(sorted(['E', 'C' ,'F', 'B', 'D']))
main.append(sorted(['A', 'H' ,'C', 'E']))
main.append(sorted(['G', 'A', 'E']))
main.append(sorted(['B', 'H', 'E']))

In [12]:
lst={}
def addelement(element):
    if element not in lst.keys():
        lst[element]=1
    else:
        lst[element]+=1

In [13]:
for i in main:
    for j in i:
        addelement(j)

In [14]:
print len(lst.keys())
for key in lst.keys():
    print key,lst[key]
    #if lst[key]<3:
    #    lst.pop(key,None)
print '------ after cleaning--------'
for key in lst.keys():
    print key,lst[key]
print len(lst.keys())


8
A 5
C 5
B 5
E 7
D 3
G 1
F 5
H 6
------ after cleaning--------
A 5
C 5
B 5
E 7
D 3
G 1
F 5
H 6
8

In [15]:
lst2items={}
def addelement2(el):
    el = ''.join(map(str.strip,el))
    if el not in lst2items.keys():
        lst2items[el]=1
    else:
        lst2items[el]+=1

In [16]:
def checkcontain(myelements,thelist):
    for i in myelements:
        if i.strip() not in thelist:
            return False
    return True

In [17]:
newcomb = itertools.combinations(lst.keys(), 2)

for i in newcomb:
    for j in main:
        if checkcontain(i,j):
            addelement2(i)

In [18]:
for key in lst2items.keys():
    print key,lst2items[key]
    if lst2items[key]<3:
        lst2items.pop(key,None)
print '------ after cleaning--------'
for key in lst2items.keys():
    print key,lst2items[key]


BD 3
BE 3
BF 2
DH 1
DF 1
BH 3
CH 4
FH 3
ED 2
CB 2
AC 3
AB 1
AE 3
EH 3
AG 1
AF 3
AH 3
EG 1
EF 3
CF 4
CE 3
CD 1
------ after cleaning--------
BD 3
BE 3
BH 3
CH 4
FH 3
AC 3
AE 3
EH 3
AF 3
AH 3
EF 3
CF 4
CE 3