Re: How can this MapAt application be done more efficiently
- To: mathgroup at smc.vnet.net
- Subject: [mg4215] Re: How can this MapAt application be done more efficiently
- From: rubin at msu.edu (Paul A. Rubin)
- Date: Tue, 18 Jun 1996 03:25:48 -0400
- Organization: Michigan State University
- Sender: owner-wri-mathgroup at wolfram.com
In article <4pis80$iuo at dragonfly.wolfram.com>,
Joel Cannon <cannon at alpha.centenary.edu> wrote:
->I have written a function to Drop any zero's from a table of numbers.
->Here is an example:
->
-> In[161]:= dropzero[ {{5, 0}, {4, 1}, {3, 2, 0}, {3, 1, 1}} ]
->
-> Out[161]= {{5}, {4, 1}, {3, 2}, {3, 1, 1}}
->
->I would like to learn how to do it more efficiently. In what I am
->doing, the 0's will always occur as the last element of the inner
->lists (although it would be nice to have it work in general).
->
->Here is my function, with another function that it calls:
->
->
-> dropzero[a_] := MapAt[droplast,a, Partition[
Map[First,Position[a,0]],1] ]
->
-> droplast[a_] := Drop[a, -1]
->
->It feels to me like two things could be improved.
->
->1. I had to define the function droplast because I couldn't figure out
->how to use Drop[#,-1] with in the MapAt expression and get it to work.
->
->2. Of less importance,
->the argument "Partition[Map[First,Position[a,0]],1]" seems a bit clumsy.
Substitution proves faster. I pasted in your functions, and added a
singleton zero to your example for test purposes.
In[]:=
Timing[ dropzero[ {{5, 0}, {4, 1}, {3, 2, 0}, {3, 1, 1}, {0}} ] ]
Out[]=
{0.329 Second, {{5}, {4, 1}, {3, 2}, {3, 1, 1}, {}}}
In[]:=
dropzero2[ a_ ] := a /. {x___, 0} -> {x} (* substitution *)
In[]:=
Timing[ dropzero2[ {{5, 0}, {4, 1}, {3, 2, 0}, {3, 1, 1}, {0}} ] ]
Out[]=
{0.055 Second, {{5}, {4, 1}, {3, 2}, {3, 1, 1}, {}}}
BTW, that's three underscores ("_") after "x" in the definition of
dropzero2.
Paul
**************************************************************************
* Paul A. Rubin Phone: (517) 432-3509 *
* Department of Management Fax: (517) 432-1111 *
* Eli Broad Graduate School of Management Net: RUBIN at MSU.EDU *
* Michigan State University *
* East Lansing, MI 48824-1122 (USA) *
**************************************************************************
Mathematicians are like Frenchmen: whenever you say something to them,
they translate it into their own language, and at once it is something
entirely different. J. W. v. GOETHE
==== [MESSAGE SEPARATOR] ====