Re: split the sublists into parts according to some rules

*To*: mathgroup at smc.vnet.net*Subject*: [mg127943] Re: split the sublists into parts according to some rules*From*: Alexei Boulbitch <Alexei.Boulbitch at iee.lu>*Date*: Tue, 4 Sep 2012 05:46:26 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*Delivered-to*: l-mathgroup@wolfram.com*Delivered-to*: mathgroup-newout@smc.vnet.net*Delivered-to*: mathgroup-newsend@smc.vnet.net

Dear all, I have a long list which has many sublists inside, Thelonglist={{a,b,c,d,e},{x,y,z},{a1,a2,a3,a4},...} Each sublist has length > 1(no single element sublist exists) . And the lengths of the sublists are different and unknow in advanced. The length of some of the sublists are odd number, such as {a,b,c,d,e} and {x,y,z}. Some sublists have even number list length, like {a1,a2,a3,a4}. What I want to achieved is to split each sublist into two (or three, or more) parts. In the two parts case, if the length of original sublist is even number, the two new parts will have same length, e.g, {a1,a2,a3,a4} become {{a1,a2},{a3,a4}}. If the sublist has length in odd number, after splitting one of the two parts should have one more element than the other. That is, Input: Thelonglist={{a,b,c,d,e}, {x,y,z}, {a1,a2,a3,a4},...} Output: Newlist={{a,b,c}, {d,e}}, {{x,y}, {z}}, {{a1,a2}, {a3,a4}},...} Or the same idea for the three parts case, Input: Thelonglist={{a,b,c,d,e}, {x,y,z}, {a1,a2,a3,a4},...} Output: Newlist={{{a,b}, {c,d}, {e}}, {{x},{y},{z}}, {{a1}, {a2}, {a3,a4}}, ...} For the case of 4 parts, the number 4 is larger than the length of some sublists and I will abandon those list with short length. Input: Thelonglist={{a,b,c,d,e}, {x,y,z}, {a1,a2,a3,a4},...} Output: Newlist={{{a}, {b}, {c}, {d,e}}, {{a1}, {a2}, {a3}, {a4}}, ...} Could there be a simple function to achieve this idea generally? Say, a function like *SplittoPart[**list_*, *partnumber_**]*, in which I just need to give the input list and the number of parts of sublists I want to have. Then it will do the job above. If the number of sublist is larger then the length of some sublists, the function just abandon those short list and do the split(or partition) work on the other lists with long enough length. Could some one help me on this? If that is too complicated, I would still be happy to see some one could give me a solution only for the case of splitting to two parts, Input: Thelonglist={{a,b,c,d,e}, {x,y,z}, {a1,a2,a3,a4},...} Output: Newlist={{a,b,c}, {d,e}}, {{x,y}, {z}}, {{a1,a2}, {a3,a4}},...} Thanks a lot for your kind help! Hi, Joul, The first that came into head is this function: complexPartition[lst_List] := Module[{partOdd}, partOdd[lst1_List] := Module[{lstTemp}, lstTemp = Drop[lst1, 1]; MapAt[Prepend[#, First[lst1]] &, Partition[lstTemp, Length[lstTemp]/2], {1}] ]; If[EvenQ[Length[lst]], Partition[lst, Length[lst]/2], partOdd[lst] ]] which is rather straightforward, and I guess a better solution might exist.= Nevertheless, check it: complexPartition[{a, b, c, d, e, f, g, 1, 2, 3}] {{a, b, c, d, e}, {f, g, 1, 2, 3}} And taking your long list: thelonglist = {{a, b, c, d, e}, {x, y, z}, {a1, a2, a3, a4}}; Map[complexPartition, thelonglist] {{{a, b, c}, {d, e}}, {{x, y}, {z}}, {{a1, a2}, {a3, a4}}} Have fun, Alexei Alexei BOULBITCH, Dr., habil. IEE S.A. ZAE Weiergewan, 11, rue Edmond Reuter, L-5326 Contern, LUXEMBOURG Office phone : +352-2454-2566 Office fax: +352-2454-3566 mobile phone: +49 151 52 40 66 44 e-mail: alexei.boulbitch at iee.lu