1
$\begingroup$

I have a list of elements

list = {a, b, c, d, e, f, g, h, i, j, k, l, ...}

I am trying to get successive differences with step s apart. For example, for $s=3$, I am trying to get {-a + d, -d + g, -g + j, ...}.

I started with diff = Differences[list, 1, 3] which gives {-a + d, -b + e, -c + f, -d + g, -e + h, -f + i, -g + j, -h + k, -i + l}. Then I apply Take[diff, {1, -1, 3}] which gives me my desired values.

Is there any way to optimise this code for larger lists?

Thanks

$\endgroup$
4
  • 1
    $\begingroup$ I think Differences@list[[;; ;; 3]] is what you want. $\endgroup$
    – yode
    Jun 11 '16 at 5:48
  • $\begingroup$ @yode Thank you $\endgroup$
    – user12609
    Jun 11 '16 at 5:51
  • 1
    $\begingroup$ @yode, that's going to be hard to outdo, so I think you can post that as an answer. :) $\endgroup$ Jun 11 '16 at 6:00
  • $\begingroup$ @J.M. Done.. :) $\endgroup$
    – yode
    Jun 11 '16 at 6:05
5
$\begingroup$

I don't sure the OP appreciate this result.So I make it as a comment.Since the OP content with it,so I post it as a answer for reader.

list = CharacterRange["a", "z"]

{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}

Differences@list[[;; ;; 3]]

{-a+d,-d+g,-g+j,-j+m,-m+p,-p+s,-s+v,-v+y}

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.