Re: Re: How to select unique elements in a list?
- To: mathgroup at smc.vnet.net
- Subject: [mg8084] Re: [mg8058] Re: [mg8041] How to select unique elements in a list?
- From: Allan Hayes <hay at haystack.demon.co.uk>
- Date: Tue, 5 Aug 1997 03:22:54 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Begin forwarded message: "w.meeussen" <meeussen.vdmcc at vandemoortele.be> in [mg8058] Re: [mg8041] Re: [mg7953] How to select unique elements in a list? writes as below ****** Wouter: There is almost always some possibility for speed up. Here is another method - following Fred Simons' idea - and the timings (a1 = DeleteCases[List@@Times@@test,_Power]);//Timing (*Fred*) {1.40619 Second,Null} (a2 = DeleteCases[List@@Plus@@test,_Times]);//Timing (*variant*) {0.421875 Second,Null} (a3 =Join@@Cases[Split[Sort[test]],{_}]);//Timing (*several postings used Split and Sort*) {0.390667 Second,Null} Check a1==a2 ==a3 True There is, of course a problem with the use of Times and Plus - they depend on not having conversions like 2 *3 to 6 and 2+3 to 5 for the given test. This could be worked around by using k/@test. Allan Allan Hayes hay at haystack.demon.co.uk http://www.haystack.demon.co.uk/training.html voice:+44 (0)116 2714198 fax: +44 (0)116 2718642 Leicester, UK **************** Begin forwarded message: From: "w.meeussen" <meeussen.vdmcc at vandemoortele.be> To: mathgroup at smc.vnet.net Subject: [mg8084] [mg8058] Re: [mg8041] Re: [mg7953] How to select unique elements in a list? at this point it starts to get generally interesting beyond the original scope: how are we (users) to get a feeling for efficiency of operations, given that a Times[sequence_of_args] evaluates sooo much faster than a List[sequence_of_args]? By any measure, List feels more 'basic' than Times, not being commutative and all. Can we ever be shure that noone will come up with a gimmick that increases the speed even further? Amazed, as always, wouter. At 22:32 2-08-97 -0400, Fred Simons wrote: >Carl Woll came with the following solution of his problem: > >Distinct[a_] := Select[Union[a],Count[a,#]===1&] > >Here is another solution, a short and (for me) amusing oneliner: > >Distinct2 = List @@ DeleteCases[ Times @@ #, _Power ]& > >It is also faster: > >test = Table[i[Random[Integer,1000]],{1000}]; > >In[9] := Distinct[test]; // Timing > >Out[10] = {12.5586 Second,Null} > >In[11] := Distinct2[test]; // Timing > >Out[11] = {1.43735 Second, Null} > >Fred Simons >Eindhoven University of Technology > > > > Dr. Wouter L. J. MEEUSSEN eu000949 at pophost.eunet.be w.meeussen.vdmcc at vandemoortele.be