       Re: Replacing list elements while retaining structure

• To: mathgroup at smc.vnet.net
• Subject: [mg73997] Re: Replacing list elements while retaining structure
• From: Rolf.Mertig at gmail.com
• Date: Mon, 5 Mar 2007 04:50:09 -0500 (EST)
• References: <esdj70\$olc\$1@smc.vnet.net>

```Is this what you want? :

structurize[a_List, b_List] := a /. Thread[Flatten[a] -> b];

Rolf

http://www.gluonvision.com

On 4 Mrz., 05:50, "D. Grady" <D.C.Gr... at gmail.com> wrote:
> Okay, so I have two lists, X and Y.  X has some complex structure
> which is important, but the values contained in X are not important.
> Y has values that are important, but the structure of Y is not.  I was
> to sequentially replace all the elements in X with the elements of Y.
>
> It's assumed that X and Y have the same total number of elements, i.e.
> Length[Flatten[X]] == Length[Flatten[Y]]
>
> Here is an example:
>
> In:=
> structurize[{x,x,{{x},x},x},{1,2,3,4,5}]
>
> Out=
> {1,2,{{3},4},5}
>
> This is what I have so far:
>
> structurize[X_List, Y_List] := ReplacePart[X, Flatten[Y], Position[X,
> a_ /; \
>       Table[{i}, {i, 1, Length[
>         Flatten[Y]]}]] /; Length[Flatten[X]] == Length[Flatten[Y]]
>
> This works fine so long as the elements of X are atomic expressions;
> however, if there is an element of X which is a more complicated
> expression, like x^2, then this function does not work as desired
> because the pattern in Position[] matches x^2 as well as x and 2.  Is
> there a way to avoid matching parts of a subexpression?  Is there a
> better way to approach the problem from the get-go?
>