MathGroup Archive 1999

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: a tricky List manipulation problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg16405] Re: a tricky List manipulation problem
  • From: Lawrence Walker <lwalker701 at earthlink.net>
  • Date: Thu, 11 Mar 1999 02:17:04 -0500
  • Organization: Morgan State University: COMSARE
  • References: <7bnqie$d38@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Adalbert,

I am not sure how my code compares speedwise but see session
below.  Also I think I could've use the Select function but
I needed to use it with the Map function.  However I didn't
know how to deal with the nested pure functions:
Map[{#,Select[l1, (#1==#)&],Select[l2, (#1==#)}]}&,tags].

So I leave you with...

In[19]:=
  l1={{"a",17},{"b",17},{"f",4},{"i",8},{"j",12},{"z",3}};
 
l2={{"a",2},{"b",17},{"c",17},{"d",16},{"e",16},{"f",9},{"g",2},{"h",17}};
In[30]:=
  tags=Intersection[Transpose[l1][[1]] ,Transpose[l2][[1]]]
Out[30]=
  {"a","b","f"}
In[31]:=
  tagForms = Apply[Alternatives,tags]
Out[31]=
  "a"|"b"|"f"
In[39]:=
  Select[l1,MemberQ[#,tagForms]&]
Out[39]=
  {{"a",17},{"b",17},{"f",4}}
In[40]:=
  Select[l2,MemberQ[#,tagForms]&]
Out[40]=
  {{"a",2},{"b",17},{"f",9}}
In[42]:=
 
Transpose[{tags,Transpose[Select[l1,MemberQ[#,tagForms]&]][[2]],
      Transpose[Select[l2,MemberQ[#,tagForms]&]][[2]]}]
Out[42]=
  {{"a",17,2},{"b",17,17},{"f",4,9}}


Hope this helps,
Lawrence


hanssen at zeiss.de wrote:
> 
> Hi, MathGroup
> 
> suppose I have two lists of lists which are structured like this:
> 
> l1={{s1,x1},....,{si,xi}},
> l2={{t1,y1},....,{tk,yk}}.
> 
> where the lengths of the two lists may be different. The first
> entries in the lists serve als "Tags", the second are "values".
> Suppose, no tag appears twice in l1 or twice in l2.
> 
> I am looking for the list of elements {sh,xh,yh} of elements
> with the following conditions:
> 
> {sh,xh} is element of l1  AND
> {sh,yh] is element of l2   (i.e. combine elements with same "tag")
> 
> Without loss of generality suppose, both lists are sorted by their tags.
> 
> A procedural approach to this problem would be to climb
> down the ladder starting with {i,j}={1,1}, comparing pairs l1[[i,1]] and l2[[j,1]]
> and taking found tag matches to a result list. This requires some caution,
> since tags from l1 may be missing in l2 and vice versa.
> 
> My question is, if there is a better pattern matching or set
> manipulation approach to this problem, since the lists l1 and l2
> might become quite large. Timing for this is the main concern.
> I am looking for a solution which avoids any loop construct.
> 
> Best regards
> 
> Dipl.-Math. Adalbert Hanszen

-- 


------------------------------------------------------------
     (\___/)     The fear of the LORD is the beginning of    
     (o\ /o)     wisdom: a good understanding have all they  
    /|:.V.:|\    that do his commandments: his praise        
    \\::::://    endureth for ever.              Psa 111:10  
-----`"" ""`------------------------------------------------
        Lawrence A. Walker Jr., M.Eng./Ph.D. Candidate      
                   Morgan State University                  
          Clarence M. Mitchell School of Engineering        
 COMSARE (Center Of Microwave/Satellite And RF Engineering) 
           Rm: 306-Schafer     Phone: (443)885-1453        
------------------------------------------------------------


  • Prev by Date: Re: Position of element in a list
  • Next by Date: Re: Multiply a constant to a matrix column
  • Previous by thread: Re: a tricky List manipulation problem
  • Next by thread: Re: ?