MathGroup Archive 2004

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

Search the Archive

Re: Return different values of a list

  • To: mathgroup at smc.vnet.net
  • Subject: [mg49435] Re: [mg49425] Return different values of a list
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Tue, 20 Jul 2004 07:53:25 -0400 (EDT)
  • References: <200407191146.HAA09125@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

[Numerous people posted similar messages about Union after 
 this one.  Those will not be posted. -- Moderator]


On 19 Jul 2004, at 20:46, Dr. Wolfgang Hintze wrote:

> *This message was transferred with a trial version of CommuniGate(tm) 
> Pro*
> Given a list containing repeating values like e.g.
>
> x={a,b,c,a,c}
>
> I would like to produce a list containing each element just once
> i.e.
>
> y={a,b,c}
>
> What is the easiest way to accomplish this?
>
> Wolfgang
>
>
This is a classic question on this list. The "easiest" way is to take 
Union:


Union[{a,b,c,a,c}]

{a,b,c}

but that sorts the elements. So if you do not want them to be sorted 
than there are lots of possibilities, whose merits depend on the nature 
of your list. The classic answer is Carl Woll's OrderedUnion

OrderedUnion[li_]:=Block[{i,Sequence},
      i[n_]:=(i[n]=Sequence[];n);i/@li]

Another approach (with a different evaluation order) uses Hold:

OrderedUnionH[li_] := ReleaseHold[Block[{i},
       i[n_] := (i[n] = Hold[]; n); i /@ li]]

Other approaches will be faster for numerical lists. It really depends 
on what sort of problem you want to use it on.



Andrzej Kozlowski
Chiba, Japan
http://www.mimuw.edu.pl/~akoz/


  • Prev by Date: Re: ArcCos[x] with x > 1
  • Next by Date: Question about shape of histogram of minimal prime partition p's
  • Previous by thread: Re: Return different values of a list
  • Next by thread: Re: Return different values of a list