Replacing list elements while retaining structure

• To: mathgroup at smc.vnet.net
• Subject: [mg73967] Replacing list elements while retaining structure
• Date: Sat, 3 Mar 2007 23:50:03 -0500 (EST)

```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[8]:=
structurize[{x,x,{{x},x},x},{1,2,3,4,5}]

Out[8]=
{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?