Re: Replace specific element with specific value.
- To: mathgroup at smc.vnet.net
- Subject: [mg99651] Re: Replace specific element with specific value.
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Sun, 10 May 2009 05:16:38 -0400 (EDT)
On 5/9/09 at 3:22 AM, nick.maj at mssm.edu wrote:
>I tried this code, it gives me right and wrong results spreeded into
>nested lists.
>data = {{0, 2}, {2, x}, {3, 4}, {4, 6}, {6, y}, {8, 9}, {9, z}}
>Table[{#1, #2 + Which[#2 === j, i, #2 =!= j, 0]} & @@@
>data, {i, {xx, yy, zz}}, {j, {x, y, z}}]
>needed output:
>{0, 2}, {2, x+xx}, {3, 4}, {4, 6}, {6, y+yy}, {8, 9}, {9, z+zz}}
>While searching only the second element of each list, if x is found
>add xx and if y is found add yy to it etc.
Why not use pattern matching? That is:
In[1]:= data = {{0, 2}, {2, x}, {3, 4}, {4, 6}, {6, y}, {8, 9}, {9,
z}};
In[2]:= data /. {x -> x + xx, y -> y + yy, z -> z + zz}
Out[2]= {{0, 2}, {2, x + xx}, {3, 4}, {4, 6}, {6, y + yy}, {8,
9}, {9,
z + zz}}
Here, I've manually input the replacement rules which seems fine
for only three variables. If there where a large number of
variables to treat in this manner, I would generate the
replacement rules programatically. Perhaps something like
In[3]:= Rule @@@ (ToExpression[{#, # <> "+" <> # <> #}] & /@ {"x",
"y", "z"})
Out[3]= {x->x+xx,y->y+yy,z->z+zz}