Partition a list into sublists of different lengths
My take:
{Most@#, Last@#} & /@ Partition[{a, b, c, d, e, f, g, h, i}, 3]
@Guesswhoitis:
Transpose[{Drop[#, None, -1], #[[All, -1]]}] & @ Partition[list, 3]
@Pickett
Developer`PartitionMap[{Most[#], Last[#]} &, lst, 3]
For those with 10.2, a couple new functions for the heck of it...
BlockMap[TakeDrop[#, 2] /. {l_} :> l &, list, 3]
or
BlockMap[TakeDrop[#, 2]~FlattenAt~2 &, list, 3]
or
With[{k := {{#1, #2}, #3} &}, BlockMap[k @@ # &, list, 3]]
Good problem for the application of argument destructuring.
data = {a, b, c, d, e, f, g, h, i};
restructure[{a_, b_, c_}] := {{a, b}, c}
restructure /@ Partition[data, 3]
{{{a, b}, c}, {{d, e}, f}, {{g, h}, i}}