Re: Function to transform lists
- To: mathgroup at smc.vnet.net
- Subject: [mg22167] Re: [mg22126] Function to transform lists
- From: Hartmut Wolf <hwolf at debis.com>
- Date: Thu, 17 Feb 2000 01:23:55 -0500 (EST)
- Organization: debis Systemhaus
- References: <200002160734.CAA17918@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Enrique Cao schrieb:
>
> Hi All :
>
> I need help in order to transform the list A to the list B.
>
> How can I get a function to do that ?
>
> A = {{{30, -2}},
> {{45, -3}},
> {{60, -4}},
> {{45, -3}, {45, -5}},
> {{30, -2}, {30, -6}},
> {{45, -7}},
> {{60, -8}},
> {{60, -8}, {60, -9}},
> {{60, -8}, {60, -9}, {60, -10}},
> {{60, -8}, {60, -9}, {60, -10}, {60, -11}},
> {{60, -8}, {60, -9}, {60, -10}, {60, -11}, {60, -12}},
> {{45, -7}, {45, -13}}, {{45, -7}, {45, -13}, {45, -14}},
> {{45, -7}, {45, -13}, {45, -14}, {45, -15}},
> {{30, -2}, {30, -6}, {30, -16}},
> {{45, -17}},
> {{45, -17}, {45, -18}},
> {{45, -17}, {45, -18}, {45, -19}},
> {{45, -17}, {45, -18}, {45, -19}, {45, -20}},
> {{45, -17}, {45, -18}, {45, -19}, {45, -20}, {45, -21}},
> {{45, -17}, {45, -18}, {45, -19}, {45, -20}, {45, -21}, {45, -22}},
> {{45, -17}, {45, -18}, {45, -19}, {45, -20}, {45, -21},
> {45, -22},{45, -23}},
> {{30, -2}, {30, -6}, {30, -16}, {30, -24}},
> {{45, -25}},
> {{60, -26}},
> {{45, -25}, {45, -27}},
> {{45, -25}, {45, -27}, {45, -28}}}
>
> B = {{{60, -4}},
> {{45, -3}, {45, -5}},
> {{60, -8}, {60, -9}, {60, -10}, {60, -11}, {60, -12}},
> {{45, -7}, {45, -13}, {45, -14}, {45, -15}},
> {{45, -17}, {45, -18}, {45, -19}, {45, -20}, {45, -21},
> {45, -22},{45, -23}},
> {{30, -2}, {30, -6}, {30, -16}, {30, -24}},
> {{60, -26}},
> {{45, -25}, {45, -27}, {45, -28}}}
>
> Thank you very much
>
> Enrique Cao
>
> cao at mundo-r.com
Enrique,
with reference to Carl K. Woll <carlw at fermi.phys.washington.edu> who had
develloped that unforgetable
OrderedUnion[li_]:=Block[{i},
i[n_]:=(i[n]=Sequence[];n);
i /@ li]
in respose to a posting in June last year, I defined...
In[3]:= structuredUnion[structure_, level_] :=
Block[{i}, i[n_] := (i[n] = Sequence[]; n);
Map[i, structure, level] //. {} -> Sequence[]]
...which applies his idea to certain levels of a structure. In addition
we need a means to reverse that structure (at a certain level, or down
to a certain level):
In[5]:= reverseStructure[structure_, level_Integer] :=
Flatten[Map[Reverse, {structure}, level + If[level < 0, 0, 1]], 1]
In[6]:= reverseStructure[structure_, levelspec : {level_Integer}] :=
Flatten[Map[Reverse, {structure}, levelspec + If[level < 0, 0, 1]], 1]
In[7]:= reverseStructure[{1, 2, 3, 4}, 0]
Out[7]= {4, 3, 2, 1}
In[8]:= reverseStructure[{{1, 2}, {3, 4}}, {0}]
Out[8]= {{3, 4}, {1, 2}}
In[9]:= reverseStructure[{{1, 2}, {3, 4}}, {1}]
Out[9]= {{2, 1}, {4, 3}}
In[10]:= reverseStructure[{{1, 2}, {3, 4}}, -2]
Out[10]= {{4, 3}, {2, 1}}
With these definitions we just need to do
In[11]:= tmp1 = reverseStructure[A, -3]; (* do not include level
{-2} *)
In[12]:= tmp2 = structuredUnion[tmp1, {-2}]; (* unify at level {-2}
*)
In[13]:= res = reverseStructure[tmp2, -3];
In[14]:= res === B
Out[14]= True
-- Hartmut
- References:
- Function to transform lists
- From: "Enrique Cao" <cao@mundo-r.com>
- Function to transform lists