is it possible to extract the symbolic variables from an array ?. For example:

s = {(1+0.1I)a*b*c,4*a*b*c,(0.5-2i)*j*k^3,0.88*b*d^2}

I would like to have another array that contains only the different symbolic terms, like this:

ss = {a*b*c,b*d^2,j*k^3}

After that, I would like to identify the position of each term



1 Answer 1


s = {(1 + 0.1 I) a*b*c, 4*a*b*c, (0.5 - 2 i)*j*k^3, 0.88*b*d^2};

ss = s /. {Complex[_, _] :> 1, Plus[_, __] :> 1,
    a_?NumericQ * z_ :> z} // Union

(* {a b c, b d^2, j k^3} *)

Position[s, #*_] & /@ ss

(* {{{1}, {2}}, {{4}}, {{3}}} *)
  • $\begingroup$ Thanks, it works perfectly. Could you explain a bit the code, I don't understand what to do after the "plus". $\endgroup$
    – Nico
    Mar 27, 2020 at 19:06
  • $\begingroup$ a_?NumericQ * z_ :> z specifies that the product of a numeric factor (a) with an expression (z) is replaced by the just the expression, i.e., drop the numeric factor. It could also be written as _?NumericQ*z_ :> z, that is, the numeric factor does not need to be given a name since it does not appear on the RHS of the rule. Look in the documentation for ReplaceAll $\endgroup$
    – Bob Hanlon
    Mar 27, 2020 at 19:18
  • $\begingroup$ Thanks so much, :D, And the last question if I wanted the second code to search exactly for the term, for example if I have {a, aa, ab} and I want to find the position of the term "a", which is {1}, do you know how this could be done?, I think this code does not discriminate the length of the expression $\endgroup$
    – Nico
    Mar 27, 2020 at 19:20
  • $\begingroup$ Position[{a, aa, ab}, a] Read the documentation for Position $\endgroup$
    – Bob Hanlon
    Mar 27, 2020 at 19:23
  • $\begingroup$ but If I put Position[{a, aa, ab}, a], print the three value. I use $\endgroup$
    – Nico
    Mar 27, 2020 at 19:32

Your Answer

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

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