Once again my specs were incomplete. By largest I mean exactly what you pointed out as in sum(map(len, setlist)).
I think this might work--sorting of the initial list should do the trick. 1) sort the sets by size (in decending order) 2) put the first (largest) into a new list (Lu) for s in Lnew[1:]: keep=True for i in range(len( Lun) ): if len(s)==len( s & Lun[i] ): keep=False break if keep==True: Lun.append( s ) ----------------- here is the complete code 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] length=[len(s) for s in L] L2= sorted(zip(length,range(len(L)))) Lnew=[L[j] for (i,j) in L2] Lnew.reverse() Lun=[Lnew[0]] # list with the result for s in Lnew[1:]: keep=True for i in range(len( Lun) ): if len(s)==len( s & Lun[i] ): keep=False break if keep==True: Lun.append( s ) #---------------- >>> Lun [set(['a', 'e', 'd', 'f']), set(['i', 'h', 'g']), set(['k', 'r', 'l']), set(['a', 'c', 'b'])] Seems like I got it. -- http://mail.python.org/mailman/listinfo/python-list