Re: List handling
- To: mathgroup at smc.vnet.net
- Subject: [mg15284] Re: List handling
- From: dreissBLOOP at bloop.earthlink.net (David Reiss)
- Date: Thu, 31 Dec 1998 04:39:38 -0500
- Organization: EarthLink Network, Inc.
- References: <76ciqj$o51@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <76ciqj$o51 at smc.vnet.net>, "Jorge Zickermann"
<jzickermann at mail.EUnet.pt> wrote:
> listA=
>
> {1977.06,1977.06,1977.06,1977.06,1977.06,2047.77,2047.77,2047.77,2047.77,218
> 1.55,2181.55,2181.55,2244.73,2244.73,2244.73,2305.5,2305.5,2305.5,2305.5,236
> 3.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92
> ,2363.92}
>
> ListB=
>
> {0.684807,0.683029,0.665242,0.665242,0.664123,0.683029,0.665242,0.665242,0.6
> 64123,0.640339,0.640339,0.620329,0.640339,0.640339,0.620329,0.661684,0.64033
> 9,0.640339,0.620329,0.640339,0.622044,0.640339,0.621506,0.660996,0.640339,0.
> 641006,0.640339,0.620935,0.640339,0.640339}
>
> ListC=
>
> {1971.45,1973.53,1994.29,1994.29,1995.6,2044.23,2065.,2065.,2066.3,2227.86,2
> 227.86,2251.22,2291.04,2291.04,2314.4,2326.89,2351.81,2351.81,2375.17,2410.2
> 2,2431.58,2410.22,2432.21,2386.11,2410.22,2409.44,2410.22,2432.88,2410.22,24
> 10.22}
>
> Position[ListB,_?(#>0.68&)]
>
> {{1},{2},{6}}
>
> Having obtained the positions of certain selected elements from ListB, I
> want to substitute the corresponding elements in ListA by the
> corresponding elements in ListC. In other words, I want to end up with;
>
>
> listA=
>
> {1971.45,1973.53,1977.06,1977.06,1977.06,2044.23,2047.77,2047.77,2047.77,218
> 1.55,2181.55,2181.55,2244.73,2244.73,2244.73,2305.5,2305.5,2305.5,2305.5,236
> 3.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92
> ,2363.92}
>
> Any help on how to do this is welcome. Thank you.
>
> Jorge
In[1]:=
ListA={1977.06,1977.06,1977.06,1977.06,1977.06,2047.77,
2047.77,2047.77,2047.77,2181.55,2181.55,2181.55,2244.73,
2244.73,2244.73,2305.5,2305.5,2305.5,2305.5,2363.92,2363.92,
2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92};
In[2]:=
ListB={0.684807,0.683029,0.665242,0.665242,0.664123,
0.683029,0.665242,0.665242,0.664123,0.640339,0.640339,
0.620329,0.640339,0.640339,0.620329,0.661684,0.640339,
0.640339,0.620329,0.640339,0.622044,0.640339,0.621506,
0.660996,0.640339,0. 641006,0.640339,0.620935,0.640339,0.640339};
In[3]:=
ListC={1971.45,1973.53,1994.29,1994.29,1995.6,2044.23,
2065.,2065.,2066.3,2227.86,2227.86,2251.22,2291.04,
2291.04,2314.4,2326.89,2351.81,2351.81,2375.17,2410.22,
2431.58,2410.22,2432.21,2386.11,2410.22,2409.44,2410.22,
2432.88,2410.22,2410.22};
In[4]:= pos=Position[ListB,_?(#>0.68&)]
Out[4]=
{{1},{2},{6}}
ReplacePart has a syntax that should do exactly what you want.
Unfortunately there is a bug in Mathematica 3 that prevents it from
evaluating according to expectations (it appears that this syntax was
not implemented as advertised, but it works in the upcoming version)
In[5]:= ReplacePart[ListA,ListC,pos,pos]
Out[5]=
{{1971.45,1973.53,1994.29,1994.29,1995.6,2044.23,2065.,2065.,2066.3,2227.86,
2227.86,2251.22,2291.04,2291.04,2314.4,2326.89,2351.81,2351.81,2375.17,
2410.22,2431.58,2410.22,2432.21,2386.11,2410.22,2409.44,2410.22,2432.88,
2410.22,2410.22}\[LeftDoubleBracket]{1},{2},{6}\[RightDoubleBracket],{
1971.45,1973.53,1994.29,1994.29,1995.6,2044.23,2065.,2065.,2066.3,
2227.86,2227.86,2251.22,2291.04,2291.04,2314.4,2326.89,2351.81,2351.81,
2375.17,2410.22,2431.58,2410.22,2432.21,2386.11,2410.22,2409.44,2410.22,
2432.88,2410.22,2410.22}\[LeftDoubleBracket]{1},{2},{6}
\[RightDoubleBracket],1977.06,1977.06,
1977.06,{1971.45,1973.53,1994.29,1994.29,1995.6,2044.23,2065.,2065.,2066.3,
2227.86,2227.86,2251.22,2291.04,2291.04,2314.4,2326.89,2351.81,2351.81,
2375.17,2410.22,2431.58,2410.22,2432.21,2386.11,2410.22,2409.44,2410.22,
2432.88,2410.22,2410.22}\[LeftDoubleBracket]{1},{2},{6}
\[RightDoubleBracket],2047.77,2047.77,2047.77,2181.55,2181.55,2181.55,
2244.73,2244.73,2244.73,2305.5,2305.5,2305.5,2305.5,2363.92,2363.92,2363.92,
2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92}
However, the following should do what you want
In[6]:=
testListA=ReplacePart[ListA, 0, pos]+(ListC-ReplacePart[ListC, 0, pos])
Out[6]=
{1971.45,1973.53,1977.06,1977.06,1977.06,2044.23,2047.77,2047.77,2047.77,
2181.55,2181.55,2181.55,2244.73,2244.73,2244.73,2305.5,2305.5,2305.5,2305.5,
2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,2363.92,
2363.92,2363.92}
These are the orignal elements of ListA
In[7]:= ListA[[Flatten[pos]]]
Out[7]=
{1977.06,1977.06,2047.77}
These are the elements of ListC that you are interested in placing in
ListA
In[8]:= ListC[[Flatten[pos]]]
Out[8]=
{1971.45,1973.53,2044.23}
And here they have been put into the new testListA
In[9]:= testListA[[Flatten[pos]]]
Out[9]=
{1971.45,1973.53,2044.23}
testListA only differs from ListA at the positions in question
In[10]:= testListA-ListA
Out[10]=
{-5.61,-3.53,0.,0.,0.,-3.54,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
0.,0.,0.,0.,0.,0.,0.,0.}
Cheers,
David
--
David Reiss
dreissBLOOP at bloop.earthlink.net
To send personal email, remove the words "bloop" and "BLOOP" from the
email address