Re: List Comparison
- To: mathgroup at smc.vnet.net
- Subject: [mg67169] Re: List Comparison
- From: Peter Pein <petsie at dordos.net>
- Date: Sun, 11 Jun 2006 02:17:57 -0400 (EDT)
- References: <e6e2b7$1uc$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
LectorZ schrieb:
> Dear experts,
>
> I want to compare two lists containing sublists and make out of them 3
> result lists.
> The comparison applies to the first two elements of the sublists.
>
> list1 = {{1, aa, 565}, {1, bb, 566}, {
> 1, cc, 546}, {2, dd, 56}, {2, ff, 56}, {2, ss, 5}}
> list2 = {{1, aa,
> 34}, {1, bb, 66}, {1, cc, 5443}, {2, dd, 76}, {2, ff, 87}, {2, mm,
> 87}}
>
> Result ONE should be:
>
> If the FIRST element AND the SECOND elements of the sublists are equal,
> then prepend the THIRD elements from list2.
>
> result1={{1, aa, 565, 34}, {1, bb, 566, 66}, {
> 1, cc, 546, 5443}, {2, dd, 56, 76}, {2, ff, 56, 87}}
>
> Result TWO should be:
> the FIRST element OR the SECOND elements of the sublists are NOT equal,
> then display the difference from the list1 perspective
>
> result2={{2, ss, 5}}
>
> Result THREE should be:
> the FIRST element OR the SECOND elements of the sublists are NOT equal,
> then display the difference from the list2 perspective
> result3={{2, mm, 87}}
>
> Thanks for your help
>
> LZ
>
list1 = {{1, aa, 565}, {1, bb, 566}, {1, cc, 546}, {2, dd, 56}, {2, ff, 56}, {2, ss, 5}};
list2 = {{1, aa, 34}, {1, bb, 66}, {1, cc, 5443}, {2, dd, 76}, {2, ff, 87}, {2, mm, 87}};
res1 = Flatten[(Cases[list1, l1:Append[Take[#1, 2], _] :> Append[l1, Last[#1]]] & ) /@ list2, 1]
--> {{1, aa, 565, 34}, {1, bb, 566, 66}, {1, cc, 546, 5443}, {2, dd, 56, 76}, {2, ff, 56, 87}}
st[l1_, l2_] := Take[l1, 2] === Take[l2, 2];
res2 = Complement[list1, list2, SameTest -> st]
--> {{2, ss, 5}}
res3 = Complement[list2, list1, SameTest -> st]
--> {{2, mm, 87}}
hth,
Peter