# How to calculate a list without loop?

I have pairs of numbers {a1, b1}, {a2, b2}, {a3, b3}, ..., {aN, bN}

What is the shortest way to compute and plot {a1, b1}, {a2, b1+b2}, {a3, b1+b2+b3},....?

• {as, bs} = Transpose[pairs]; result = Transpose[{as, Accumulate[bs]}] – user484 Nov 14 '15 at 5:08
• Or, Transpose[MapAt[Accumulate, Transpose[pairs], 2]]. – J. M.'s technical difficulties Nov 14 '15 at 7:20

Accumulate@Array[b, {3}]
(* {b[1], b[1] + b[2], b[1] + b[2] + b[3]} *)


therefore:

{a, b} = Transpose[list];
Transpose[{a, Accumulate[b]}]


Also this will do the job:

Rest@FoldList[{#2[[1]], #1[[2]] + #2[[2]]} &, {0, 0}, list]


or even easier

list[[All,2]]=Accumulate@list[[All,2]]; list

FoldList[{0, 1} # + #2 &, list]


thanks to Mike Honeychurch, without pure function:

list = {{a1, b1}, {a2, b2}, {a3, b3}};

Thread[{list[[All, 1]], Accumulate[list][[All, 2]]}]

• Could you please explain a little bit more how Rest@FoldList structure works? – Maria Nov 14 '15 at 17:30
• @Maria. Rest just removes first element in the list, i.e. Rest[{1, 2, 3}] gives {2, 3}. @ is a shorthand for head application. So Rest@FoldList[...] is the same as Rest[FoldList[...]]. Finally, FoldList[Plus, 0, {a, b, c}] gives {0, a, a + b, a + b + c}. Now you may see why we need Rest - just to get rid of 0. – garej Nov 14 '15 at 17:55