Re: A generalized Transpose?
- To: mathgroup at smc.vnet.net
- Subject: [mg9204] Re: A generalized Transpose?
- From: Robert Villegas <villegas>
- Date: Tue, 21 Oct 1997 02:03:17 -0400
- Organization: Wolfram Research
- Sender: owner-wri-mathgroup at wolfram.com
> What I have is a list of structures of identical form, but each structure > is not rectangular. An example with only two structures is > ys={{a1,{b1,{c1,d1}}},{a2,{b2,{c2,d2}}}}; > > My question is, How can I make the similar change to this list, to obtain: > ysT={{a1,a2},{{b1,b2},{{c1,c2},{d1,d2}}}}; One of the best ways to apply a function to, or group, corresponding elements of lists is to use a Listable function. This will work when the "identical form" is an irregularly nested list (the heads are List), which is true for your example: In[6]:= ys={{a1,{b1,{c1,d1}}},{a2,{b2,{c2,d2}}}}; In[7]:= Attributes[f] = Listable; In[8]:= f @@ ys Out[8]= {f[a1,a2],{f[b1,b2],{f[c1,c2],f[d1,d2]}}} In[9]:= % /. f -> List Out[9]= {{a1,a2},{{b1,b2},{{c1,c2},{d1,d2}}}} f here is just a dummy function used to glue the structures together. Since its purpose is temporary, this procedure can be shrink-wrapped into a small function: Glue[h_, {lists__List}] := Module[{f}, Attributes[f] = Listable; f[lists] /. f -> h ] Here's how to use Glue on your lists: In[11]:= Glue[List, ys] Out[11]= {{a1,a2},{{b1,b2},{{c1,c2},{d1,d2}}}} Robby Villegas