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}}