On 18 Mar 2005 19:41:55 -0800, [EMAIL PROTECTED] wrote: >Once again my specs were incomplete. >By largest I mean exactly what you pointed out as in sum(map(len, >setlist)). > But that will not necessarily yield a single setlist taken from the source set list, so you still need a selection amongst equals. You can make it explicit, or you can say you'll take whatever a sort puts at the sorted list extreme, which you seem to have done ;-)
>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. > Does it work on L = [set('abc'), set('def'), set('abcdef')] ? I get: 0: [] 6: [set(['a', 'c', 'b']), set(['e', 'd', 'f'])] 6: [set(['a', 'c', 'b', 'e', 'd', 'f'])] Your code above: >>> L = [set('abc'), set('def'), set('abcdef')] >>> 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', 'c', 'b', 'e', 'd', 'f'])] But your successful set list is not unique in its success value (6) ;-) Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list