MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: split the sublists into parts according to some rules

splitToParts[list_List, segments_Integer?Positive] :=
 Module[{len, revList =
    Select[list, Length[#] >= segments &]},
  (len = Floor[Length[#]/segments];
     If[segments*len == Length[#],
      Partition[#, len],
       {Take[#, len + 1]},
         {Drop[#, len + 1]}, segments - 1][[1]]
       ]]) & /@ revList]

theLongList = {{a, b, c, d, e}, {x, y, z}, {a1, a2, a3, a4}};

splitToParts[theLongList, 2]

{{{a, b, c}, {d, e}}, {{x, y}, {z}}, {{a1, a2}, {a3, a4}}}

splitToParts[theLongList, 3]

{{{a, b}, {c, d}, {e}}, {{x}, {y}, {z}}, {{a1, a2}, {a3}, {a4}}}

splitToParts[theLongList, 4]

{{{a, b}, {c}, {d}, {e}}, {{a1}, {a2}, {a3}, {a4}}}

Bob Hanlon

On Fri, Aug 31, 2012 at 3:58 AM, Joug Raw <jougraw at> wrote:
> 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!

  • Prev by Date: Re: Landau letter, Re: Mathematica as a New Approach...
  • Next by Date: Re: Command Possible?
  • Previous by thread: Re: Is there documentation of the format of a "sound object"
  • Next by thread: Re: split the sublists into parts according to some rules