Subject: [mg4180] How can this MapAt application be done more efficiently

From: Joel Cannon <cannon at alpha.centenary.edu>

Date: Tue, 11 Jun 1996 00:53:41 -0400

Sender: owner-wri-mathgroup at wolfram.com

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.
Thanks in advance,
-------
Joel W. Cannon
Dept. of Physics
Centenary College of Louisiana
P. O. Box 41188
Shreveport, LA 71134-1188
(318)869-5160
(318)869-5026 FAX
==== [MESSAGE SEPARATOR] ====