Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

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

Search the Archive

Re: Union - simple question

  • To: mathgroup at smc.vnet.net
  • Subject: [mg49046] Re: Union - simple question
  • From: koopman at sfu.ca (Ray Koopman)
  • Date: Tue, 29 Jun 2004 04:50:32 -0400 (EDT)
  • References: <cbol4e$4e0$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Steve Gray <stevebg at adelphia.net> wrote in message 
news:<cbol4e$4e0$1 at smc.vnet.net>...
> I don't understand why Union here doesn't work. (Sort is ok.)
> I want Union to eliminate list items where element [[1,2]] is
> duplicated. In this case, the first and third are duplicated because
> they both have '5' there.
> 
>       ts = {{{1,2,3},5}, {{3,8,7},6}, {{7,8,9},5}, {{1,2,3},7}};
> Sort [ts, #1[[2]] < #2[[2]] &]
> Union[ts, Sametest -> (#1[[2]] == #2[[2]]&)]
> 
> Any help will be appreciated.

In[1]:= ts = {{{1,2,3},5},{{3,8,7},6},{{7,8,9},5},{{1,2,3},7}}
Out[1]= {{{1,2,3},5},{{3,8,7},6},{{7,8,9},5},{{1,2,3},7}}

In[2]:= Sort@ts
Out[2]= {{{1,2,3},5},{{1,2,3},7},{{3,8,7},6},{{7,8,9},5}}

In[3]:= Reverse@Sort@ts
Out[3]= {{{7,8,9},5},{{3,8,7},6},{{1,2,3},7},{{1,2,3},5}}

In[4]:= sametest = (Print@{##}; #1[[2]] == #2[[2]]) &
Out[4]= (Print[{##1}];#1\[LeftDoubleBracket]2\[RightDoubleBracket]==#2
        \[LeftDoubleBracket]2\[RightDoubleBracket])&

In[5]:= Union[ts, SameTest->sametest]
        {{{1,2,3},7},{{1,2,3},5}}
        {{{3,8,7},6},{{1,2,3},7}}
        {{{7,8,9},5},{{3,8,7},6}}
Out[5]= {{{1,2,3},5},{{1,2,3},7},{{3,8,7},6},{{7,8,9},5}}

In[6]:= Union[Sort@ts, SameTest->sametest]
        {{{1,2,3},7},{{1,2,3},5}}
        {{{3,8,7},6},{{1,2,3},7}}
        {{{7,8,9},5},{{3,8,7},6}}
Out[6]= {{{1,2,3},5},{{1,2,3},7},{{3,8,7},6},{{7,8,9},5}}

In[7]:= Union[Reverse@Sort@ts, SameTest->sametest]
        {{{1,2,3},7},{{1,2,3},5}}
        {{{3,8,7},6},{{1,2,3},7}}
        {{{7,8,9},5},{{3,8,7},6}}
Out[7]= {{{1,2,3},5},{{1,2,3},7},{{3,8,7},6},{{7,8,9},5}}

It looks like Union first sorts the list, and then uses SameTest only to
check adjacent elements (which it passes to SameTest in reverse order!).


  • Prev by Date: RE: PlotLabel with assigned variables *and* on several lines
  • Next by Date: Re: Re: options Transpose[] ?
  • Previous by thread: Re: Union - simple question
  • Next by thread: Re: Union - simple question