I would switch to doing this in two passes: First get the length of the longest sublist:
Maximum(List(l, x -> Length(x)); Then get the lists of that length: Filtered(l, x -> Length(x)=4); If you aren't familiar with these notations (they are worth learning), you could write out some loops instead: maxlen := 0; for i in [1..Length(l)] do maxlen := Maximum(maxlen, Length(l[i])); od; k := []; for i in [1..Length(l)] do if Length(l[i]) = maxlen then Add(k, l[i]); fi; od; Or, we could loop directly over the members of l: maxlen := 0; for i in l do maxlen := Maximum(maxlen, Length(i)); od; k := []; for i in l do if Length(i) = maxlen then Add(k, i); fi; od; On 10/10/2014 13:59, "Siddiqua Mazhar (PGR)" <s.maz...@newcastle.ac.uk> wrote: >Dear Sir/Madam, > Here I made changes in my previous email, sorry for inconvinience > >If I have a list let say >a:=[[1,2,3],[4,5],[6,7,8,9],[10,11,12,],[13,14],[15,16,17,18]]; > >I want to find the list of maximum length in it, or collection of list of >max length from above > >For instance, result:=[[6,7,8,9],[15,16,17,18]]; how can i find this >result? > >here is one algorithm that I tried > >>Comparison:=function(a) >>local i,k; >>k:=[]; >> for i in [1..(Length(a)-1)] do >> if Length(a[i])<Length(a[i+1]) then >> Add(k,a[i+1]); >> elif not a[i] in k then >> Add(k,a[i]); >> fi; >> od; >>return k; >>end; > >This program works, however , what if two list are of same length next to >each other? >for instance a:=[[1,2,3],[4,5],[6,7],[8,9,10]]? > >want this result:=[1,2,3],[8,9,10] > >or if a:=[[1,2],[3,4],[5,6]] in this case the result wouldl be the same >as a because every list are of same length. > >Many thanks. > >Kind regards >Siddiqua >_______________________________________________ >Forum mailing list >Forum@mail.gap-system.org >http://mail.gap-system.org/mailman/listinfo/forum _______________________________________________ Forum mailing list Forum@mail.gap-system.org http://mail.gap-system.org/mailman/listinfo/forum