21
$\begingroup$

I want to turn a sum like this

sum =a-b+c+d

Into a List like this:

sumToList[sum]={a,-b,c,d}

How can I achieve this?

$\endgroup$
2
  • 2
    $\begingroup$ I am a professor of "vectorial analysis" in Mexico. I try to teach the subjects with the use of "Mathematica". I solved a problem seeing this page and also this: mathematica.stackexchange.com/questions/100758/… ... in which I was not allowed to comment. This was what I did to find the "scalar potential function". i.sstatic.net/ugIlP.png $\endgroup$ Commented Feb 6, 2017 at 17:43
  • $\begingroup$ @David I converted your answer to a comment, as it seems more appropriate as such. I know that new users do not have the "privilege" to comment everywhere (a "spam" control measure I believe) but if you continue to participate you will find that you soon do. $\endgroup$
    – Mr.Wizard
    Commented Feb 6, 2017 at 19:12

3 Answers 3

27
$\begingroup$
List @@ sum

{a, -b, c, d}

From the docs on Apply (@@):

f@@expr replaces the head of expr by f.

So List@@sum replaces Head[sum] (that is, Plus) with List.

You can also get the same result by changing 0th Part of sum (which is its Head) to List:

sum[[0]] = List; sum

{a, -b, c, d}

$\endgroup$
3
  • 2
    $\begingroup$ There is a slight hiccup that you can encounter using this. If you're not explicitly doing a sum, you will list over whatever the head of the function is. e.g. List @@ 2*3 will result in {2,3} $\endgroup$
    – Alex DB
    Commented Feb 10, 2017 at 17:10
  • $\begingroup$ @AlexDB, you are right; List@@expr does change the head of expr, whatever it is, to List. $\endgroup$
    – kglr
    Commented Feb 10, 2017 at 17:16
  • 2
    $\begingroup$ So what's the most general way to make a list, so that we include both distinct cases where there is one and multiple terms? $\endgroup$
    – hal
    Commented Aug 7, 2020 at 18:30
13
$\begingroup$

Try :

a - b + c + d /. Plus -> List

You can have a look at a - b + c + d //FullForm to see why this works.

$\endgroup$
2
  • 3
    $\begingroup$ Good one. And maybe sum[[0]] = List; sum $\endgroup$
    – user1066
    Commented Oct 22, 2012 at 19:32
  • 1
    $\begingroup$ @TomD that is the one I like to use :) $\endgroup$ Commented Oct 22, 2012 at 22:24
7
$\begingroup$

Still another route:

Last[CoefficientArrays[#]] Variables[#] &[a - b + c + d]
   {a, -b, c, d}
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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