list of unique non-subset sets
Raymond Hettinger
vze4rx4y at verizon.net
Thu Mar 17 18:56:46 EST 2005
"Kent Johnson" <kent37 at tds.net> wrote in message
news:4239ead0$1_3 at newspeer2.tds.net...
> Raymond Hettinger wrote:
> > [les_ander at yahoo.com]
> >
> >>I have many set objects some of which can contain same group of object
> >>while others can be subset of the other. Given a list of sets,
> >>I need to get a list of unique sets such that non of the set is an
> >>subset of another or contain exactly the same members.
> >>
> >>Tried to do the following:
> >>s1=set(['a','b','c'])
> >>s2=set(['a','c'])
> >>s3=set(['a','d','e','f'])
> >>s4=set(['r','k','l'])
> >>s5=set(['r','k','l'])
> >>L=[s1,s2,s3,s4,s5]
> >>----------------------- > cleaned-up list should contain s1, s3, s5
> >
> >
> > This should do the trick:
> >
> >
> > result = []
> > for s1 in L:
> > for s2 in result:
> > if s1 <= s2:
> > break
> > else:
> > result.append(s1)
> >
> > print result
>
> If I understand the original post correctly, you also need to check for an
existing set being a
> subset of the set you are adding. A better test case is
> s1=set(['a','b','c'])
> s2=set(['a','c'])
> s3=set(['a','d','e','f'])
> s4=set(['r','k','l'])
> s5=set(['r','k','l'])
> s6=set(['g', 'h'])
> s7=set(['h', 'i'])
> s8=set(['g', 'h', 'i'])
>
> L=[s1,s2,s3,s4,s5,s6,s7,s8]
> # ----------------------- > cleaned-up list should contain s1, s3, s5, s8
Try this:
result = []
seen = set()
for s1 in L:
for s2 in L:
if s1 < s2:
break
else:
if s1 not in seen:
result.append(s1)
seen.add(frozenset(s1))
print result
Raymond Hettinger
More information about the Python-list
mailing list