Re: List manipulation question

*To*: mathgroup at smc.vnet.net*Subject*: [mg67188] Re: List manipulation question*From*: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>*Date*: Sun, 11 Jun 2006 23:07:49 -0400 (EDT)*Organization*: The Open University, Milton Keynes, UK*References*: <e6ge0k$nh3$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

LectorZ wrote: > Dear experts, > > I need to calculate distances between the elements of the following > list: > > list={3700, 3800, 3900, 3950, 4000, 4050, 4100, 4150, 4200, 4250, 4300, > 4350, > 4400, 4450, 4500, 4550, 4600, 4650} > > with the following logic: > > a) If it is the first element, then take the simple difference to the > next (i.e. 3800 - 3700) > b) If it is the last element, then take the simple difference to the > second last (i.e. 4650 -4600) > c) the difference for all elements in between shoud be calculated as > (next - last)/2 (i.e. (3900 - 3700)/2) > > This list should come out as a result: > > result={100,100,75,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50} > > Thanks a lot for your help > > LZ > Hi Lector, What about the following function? In[1]:= list = {3700, 3800, 3900, 3950, 4000, 4050, 4100, 4150, 4200, 4250, 4300, 4350, 4400, 4450, 4500, 4550, 4600, 4650}; In[2]:= myDistance[x_List] := Module[ {lst}, lst = Partition[x, 3, 1]; Join[ {First[lst][[2]] - First[lst][[1]]}, ((Last[#1] - First[#1])/2 & ) /@ lst, {Last[lst][[3]] - Last[lst][[2]]} ] ] In[3]:= myDistance[list] Out[3]= {100, 100, 75, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50} Best regards, Jean-Marc