There must be a better way!
- To: mathgroup at smc.vnet.net
- Subject: [mg2322] There must be a better way!
- From: pehowland at taz.dra.hmg.gb ()
- Date: Tue, 24 Oct 1995 02:14:07 -0400
- Organization: LSC2 Division, Defence Research Agency
Hi. I'm trying to write a function that partitions a list into
segments of length given by another length. eg.
Given l1 = {A,B,C,D,E,F,G,H,I,J}
and l2 = {2,3,4,1}
I want to be able to say
In[1] := MyPartition[l1, l2]
and get
Out[1] = {{A,B}, {C,D,E}, {F,G,H,I}, {J}}
I've racked my brains, but have been unable to think of an elegant
solution, but instead managed the following Fortran-like function:
MyPartition[list1_, list2_] :=
Module[{ans,l},
ans={};
l = list1;
Do [
AppendTo[ans, Take[l, list2[[i]]]];
l = Drop[l, list2[[i]]],
{i, Length[list2]}
];
ans
]
Someone put me out of my misery! How can I code this in a more efficient
manner?!
Paul E Howland Tel. +44 (0)1684 895767
Long Range Ground Radar Sensors Fax. +44 (0)1684 896315
LSC2 Division Email. PEHOWLAND at DRA.HMG.GB
Defence Research Agency
St Andrews Road
Malvern
Worcestershire, WR14 3PS, UK
=========================================================================