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