Re: rule based program for "Deleting repeated members of a list."
- To: mathgroup at smc.vnet.net
- Subject: [mg81990] Re: rule based program for "Deleting repeated members of a list."
- From: Peter Pein <petsie at dordos.net>
- Date: Mon, 8 Oct 2007 02:06:22 -0400 (EDT)
- References: <fe7j44$qga$1@smc.vnet.net>
mumat schrieb:
> Hi,
>
> I have a list s={a,b,c,c,d,e,e,f,g,g,g,h,a,b};
>
> I need to write a program so that it reads the list and ignors
> repeated elements; so it outputs the following:
>
> RepeatRemover[s]={a,b,c,d,e,f,g,h,a,b};
>
> I am looking for a rule-based program to do this!
>
> Any help would be greatly appreciated.
>
> C.S.
>
>
Hi numat,
if you have to do this with patterns,
In[2]:= s //. {x___, y_, y_, z___} :> {x, y, z}
Out[2]= {a, b, c, d, e, f, g, h, a, b}
will do the task.
If you've got longer lists, this could last a while:
In[3]:=
SeedRandom[2007];
s = Flatten[Table[Random[Integer, {1, 8}],
{k, Random[Integer, {1, 5}]}, {1234}]];
In[5]:=
AbsoluteTiming[s1 = s //. {a___, x_, x_, b___} :> {a, x, b}; ][[1]]
Out[5]= 74.0625 Second
Compare this to
In[6]:= AbsoluteTiming[s2 = First /@ Split[s]; ][[1]]
Out[6]= 0. Second
or (to put at least a pattern into the solution):
In[7]:=
AbsoluteTiming[
s3 = First /@ DeleteCases[Partition[s, 2, 1, {1, 1}, "foo"],
{x_, x_}];
][[1]]
Out[7]= 0. Second
and the reasults are the same:
In[8]:= s1 === s2 === s3
Out[8]= True
Regards,
Peter