MathGroup Archive 2008

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

Search the Archive

Re: Clever way to manipulate lists

  • To: mathgroup at smc.vnet.net
  • Subject: [mg94421] Re: [mg94366] Clever way to manipulate lists
  • From: DrMajorBob <btreat1 at austin.rr.com>
  • Date: Fri, 12 Dec 2008 06:56:57 -0500 (EST)
  • References: <200812110845.DAA01163@smc.vnet.net>
  • Reply-to: drmajorbob at longhorns.com

And here's a third method:

Same example:

one = Drop[Array[{#, #} &, 10], {3}]
two = Drop[Array[{#, #^2} &, 10], {2, 5}]

{{1, 1}, {2, 2}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}, {9, 9}, {10,
   10}}

{{1, 1}, {6, 36}, {7, 49}, {8, 64}, {9, 81}, {10, 100}}

{oneMod, twoMod} =
  Transpose@
   ReplaceList[
    Sort@Join[one,
      two], {___, {x_, z1_}, {x_, z2_}, ___} :> {{x, z1}, {x, z2}}]

{{{1, 1}, {6, 6}, {7, 7}, {8, 8}, {9, 9}, {10, 10}}, {{1, 1}, {6,
    36}, {7, 49}, {8, 64}, {9, 81}, {10, 100}}}

Bobby

On Thu, 11 Dec 2008 15:27:44 -0600, DrMajorBob <btreat1 at austin.rr.com>  
wrote:

> Here's an example where both lists have deletions:
>
> one = Drop[Array[{#, #} &, 10], {3}]
> two = Drop[Array[{#, #^2} &, 10], {2, 5}]
>
> {{1, 1}, {2, 2}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}, {9, 9}, {10,
>    10}}
>
> {{1, 1}, {6, 36}, {7, 49}, {8, 64}, {9, 81}, {10, 100}}
>
> and here's a simple way of pruning them to common x values:
>
> oneMod = With[{xVals = two[[All, 1]]},
>    Select[one, MemberQ[xVals, #[[1]]] &]]
> twoMod = With[{xVals = one[[All, 1]]},
>    Select[two, MemberQ[xVals, #[[1]]] &]]
>
> {{1, 1}, {6, 6}, {7, 7}, {8, 8}, {9, 9}, {10, 10}}
>
> {{1, 1}, {6, 36}, {7, 49}, {8, 64}, {9, 81}, {10, 100}}
>
> or
>
> oneMod = Intersection[one, two, SameTest -> (Equal @@ First /@ {##} &)]
> twoMod = Intersection[two, one, SameTest -> (Equal @@ First /@ {##} &)]
>
> {{1, 1}, {6, 6}, {7, 7}, {8, 8}, {9, 9}, {10, 10}}
>
> {{1, 1}, {6, 36}, {7, 49}, {8, 64}, {9, 81}, {10, 100}}
>
> Note: I've seen no documentation to suggest those Intersections should  
> be different. But they are, fortunately!
>
> Also, both methods depend (to some extent) on having no duplicates among  
> the x values.
>
> Bobby
>
> On Thu, 11 Dec 2008 02:45:28 -0600, guerom00 <guerom00 at gmail.com> wrote:
>
>> Hi everyone,
>>
>> I'm still struggling through lists manipulation. I'll take a concrete
>> example to illustrate my point.
>> Let's say I have a first list, say coordinates on a regular grid :
>>
>> list1={{x1,y1},{x2,y2},{x3,y3}...{xN,yN}}
>>
>> This obviously has a Length of N. Now, let's say I have a second list.
>> In this one, there are fewer than N elements, some points are
>> missing... Let's say it misses a point at x2 :
>>
>> list2 ={{x1,z1},{x3,z3},{x4,z4}...{xN,zN}}
>>
>> Now, since those two lists are not of the same length, I cannot add
>> them, substract them or something. But list2 is included in list1 (in
>> the sense of set theory). Now, what I want to do is, in this example,
>> remove the point {x2,y2} from list1 and then the two list will have
>> the same length and I'll be able to manipulate them as I want.
>> Right now, I do that with For loops (detect elements which are in
>> list1 and not in list2 and delete them, etc...) and that works but it
>> is not elegant.
>> I'm looking for a concise, elegant way to do that if somebody sees
>> what I mean...
>>
>> Thanks in advance :)
>>
>
>
>



-- 
DrMajorBob at longhorns.com


  • Prev by Date: Re: Clever way to manipulate lists
  • Next by Date: RE: Clever way to manipulate lists
  • Previous by thread: Re: Clever way to manipulate lists
  • Next by thread: RE: Clever way to manipulate lists