Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: Group and Replace itens sequence in a list
Replies: 10   Last Post: Aug 29, 2012 1:14 AM

 Messages: [ Previous | Next ]
 Murta Posts: 86 Registered: 7/5/10
Re: Group and Replace itens sequence in a list
Posted: Aug 26, 2012 2:51 AM

Good point Fred

You example remembered me I miss in Mathematica the possibility to work with inter row operations in a simpler way (simpler than ListConvolve).
For example, the Position function (or some new one) could looking for not just one element in the list, but for sequence of elements too and retur it position. With this option we could avoid to use partition in your solution.
The problem with Partition in large list is the waste of memory. See the example:

data = RandomReal[1, 10^6]
m1 = ByteCount[data];
m2 = ByteCount[Partition[data, 3, 1]];
N@m2/m1
Out[1]=3

We break the list and then search. The best performance way would be search the sequence (a,b,a) without break it.
Map function to me is a good example of function that could have one "MapOverPartition". It would save a lot of memory.

tks
Murta

On Saturday, August 25, 2012 5:26:30 AM UTC-3, Fred Simons wrote:
> Solutions with pattern matching can be very elegant, such as Bob
>
> Hanlon's solution, but also tend to be very slow when the problem is a
>
> little bit larger.
>
>
>
> Here is a solution by finding the position of the triple {a,b,a} and
>
> then taking the parts of the list outside these triples.
>
>
>
> g[lst_] := With[{limits=Partition[Flatten[{1,
>
> Position[Partition[lst,3,1], {a,b,a}] /.
>
> {n_Integer}->{n-1,n+3},Length[lst]}],2]}, Take[lst, #]& /@ limits]
>
>
>
> In the following commands f is Bob's function:
>
>
>
> In[4]:= lst={1,2,3,a,b,a,4,5,6,a,b,c,7,8,9,a,b,a,10,11,12} ;
>
> z1=f[lst]; // Timing
>
> z2=g[lst]; // Timing
>
> z1===z2
>
> Out[5]= {0.,Null}
>
> Out[6]= {0.,Null}
>
> Out[7]= True
>
>
>
> Both functions are fast enough. Now we make the list 500 times longer:
>
>
>
> In[12]:= lstt=Flatten[Table[lst, {500}],1];
>
> z1=f[lstt]; // Timing
>
> z2=g[lstt]; // Timing
>
> z1===z2
>
> Out[13]= {5.007632,Null}
>
> Out[14]= {0.015600,Null}
>
> Out[15]= True
>
>
>
> Fred Simons
>
> Eindhoven University of Technology
>
>
>
>
>
> Op 24-8-2012 11:04, Bob Hanlon schreef:
>

> > Clear[f]
>
> >
>
> > f[list_?VectorQ] := Cases[
>
> > (list //. {s___, a, b, a, r___} -> {{s}, {r}}) /.
>
> > {} ->
>
> > Sequence[], _?VectorQ, Infinity]
>
> >
>
> > f[{1, 2, 3, a, b, a, 4, 5, 6, a, b, c, 7, 8, 9, a, b, a, 10, 11, 12}]
>
> >
>
> > {{1, 2, 3}, {4, 5, 6, a, b, c, 7, 8, 9}, {10, 11, 12}}
>
> >
>
> > f[{a, b, a, 1, 2, 3, a, b, a, 4, 5, 6, a, b, c, 7, 8, 9, a, b, a, 10,
>
> > 11, 12}]
>
> >
>
> > {{1, 2, 3}, {4, 5, 6, a, b, c, 7, 8, 9}, {10, 11, 12}}
>
> >
>
> > f[{1, 2, 3, a, b, a, 4, 5, 6, a, b, c, 7, 8, 9, a, b, a, 10, 11, 12,
>
> > a, b, a}]
>
> >
>
> > {{1, 2, 3}, {4, 5, 6, a, b, c, 7, 8, 9}, {10, 11, 12}}
>
> >
>
> > f[{a, b, a, 1, 2, 3, a, b, a, 4, 5, 6, a, b, c, 7, 8, 9, a, b, a, 10,
>
> > 11, 12, a, b, a}]
>
> >
>
> > {{1, 2, 3}, {4, 5, 6, a, b, c, 7, 8, 9}, {10, 11, 12}}
>
> >
>
> >
>
> > Bob Hanlon
>
> >
>
> >
>
>

> >> Hi All
>
> >>
>
> >> I have a simple problem that is:
>
> >>
>
> >> l={1,2,3,a,b,a,4,5,6,a,b,c,7,8,9,a,b,a,10,11,12}
>
> >>
>
> >> I want to replace all a,b,a sequence by X to get:
>
> >>
>
> >> l={1,2,3,X,4,5,6,a,b,7,8,9,X,10,11,12}
>
> >>
>
> >> Then I want to group it by X intervals as
>
> >> l={{1,2,3},{4,5,6,a,b,7,8,9},{10,11,12}}
>
> >>
>
> >> If I don't need to put the intermediate X, even better!
>
> >> I think the with pattern, RaplaceAll and DeleteCases I can do It. Some clue?
>
> >> Tks
>
> >> Murta
>
> >>
>
> >>
>
> >>
>
> >
>
> >
>
> > -----
>
> > Geen virus gevonden in dit bericht.
>
> > Gecontroleerd door AVG - www.avg.com
>
> > Versie: 2012.0.2197 / Virusdatabase: 2437/5219 - datum van uitgifte: 08/23/12
>
> >
>
> >
>
> >

Date Subject Author
8/23/12 Ulrich Arndt
8/23/12 Ulrich Arndt
8/24/12 Bob Hanlon
8/25/12 Murta
8/25/12 Simons, F.H.
8/26/12 Murta
8/28/12 Ulrich Arndt
8/29/12 Dana DeLouis