"Kent Johnson" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Raymond Hettinger wrote: > > [EMAIL PROTECTED] > > > >>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 -- http://mail.python.org/mailman/listinfo/python-list