Re: Pattern problem: How to count from a long list of numbers all

• To: mathgroup at smc.vnet.net
• Subject: [mg87611] Re: Pattern problem: How to count from a long list of numbers all
• From: samuel.blake at maths.monash.edu.au
• Date: Mon, 14 Apr 2008 05:45:13 -0400 (EDT)
• References: <ftsd3f\$bct\$1@smc.vnet.net>

```On Apr 13, 5:35 pm, "Dana DeLouis" <dana.... at gmail.com> wrote:
> > x = {1, 3, 3, 3, 2, 3, 3, 1, 3, 3}
> > And I want to count how many say a 3 followed immediately by 3.
> > ...1 followed by a 3, there will be 2
>
> Just to be different for this particular problem...
>
> x = {1, 3, 3, 3, 2, 3, 3, 1, 3, 3};
>
>  Count[ListConvolve[{3, -3}, x], 0]
>  4
>
>  Count[ListConvolve[{1, -3}, x], 0]
>  2
>
> --
> HTH   :>)
> Dana DeLouis
>
> "Nasser Abbasi" <n... at 12000.org> wrote in message
>
> news:fti404\$ok1\$1 at smc.vnet.net...
>
> > Hello;
>
> > I think using Pattern is my weakest point in Mathematica.
>
> > I have this list, say this: (it is all a list of integers, no real
> numbers).
>
> > x = {1, 3, 3, 3, 2, 3, 3, 1, 3, 3}
>
> > And I want to count how many say a 3 followed immediately by 3. So in th=
e
> > above list, there will be 4 such occurrences. And if I want to count how=

> > many 1 followed by a 3, there will be 2 such cases, etc...
>
> > I tried Count[] but I do not know how to set the pattern for "3 followed=

> by
> > a comma followed by 3" or just "3 followed immediately by 3".
>
> > I tried few things, such as the following
>
> > In[68]:= Count[x, {3, 3}_]
> > Out[68]= 0
>
> > Also tried Cases, but again, I am not to good with Patterns, so not sure=

> how
> > to set this up at this moment.
>
> > Any ideas will be appreciated.
>
> > Nasser
> > I really need to sit down and study Patterns in Mathematica really well
> one
> > day :)

Here's two other ways, one is slightly faster and one slower:

In[20]:= xx = RandomInteger[{1, 5}, 1000000];

In[21]:= Count[Differences[xx], 0] // Timing

Out[21]= {0.145709, 200402}

In[22]:= Count[ListConvolve[{-3, 3}, xx], 0] // Timing

Out[22]= {0.214594, 200402}

In[23]:= Timing[Length[xx] - Length[Split[xx]]]

Out[23]= {0.322837, 200402}

Sam

```

• Prev by Date: Re: Re: RE: Product
• Next by Date: Re: Re: RE: Product
• Previous by thread: Re: Pattern problem: How to count from a long list of numbers all
• Next by thread: A Problem with Simplify