list of unique non-subset sets

Kent Johnson kent37 at tds.net
Thu Mar 17 21:53:55 CET 2005


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

which both Raymond and STeVe's proposals fail.

Kent



More information about the Python-list mailing list