Re: How can this MapAt application be done more efficiently

• To: mathgroup at smc.vnet.net
• Subject: [mg4217] Re: How can this MapAt application be done more efficiently
• From: Paul Abbott <paul at earwax.pd.uwa.edu.au>
• Date: Tue, 18 Jun 1996 03:26:09 -0400
• Organization: University of Western Australia
• Sender: owner-wri-mathgroup at wolfram.com

```Joel Cannon 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).

DeleteCases does what you want:

?DeleteCases

DeleteCases[expr, pattern] removes all elements of expr which
match pattern. DeleteCases[expr, pattern, levspec] removes
all parts of expr on levels specified by levspec which
match pattern.

expr = {{5, 0}, {4, 1}, {3, 2, 0}, {3, 1, 1}};

we use pattern-matching and a conditional test to delete all zeros (at
all levels):

DeleteCases[expr, x_ /; x == 0, Infinity]

{{5}, {4, 1}, {3, 2}, {3, 1, 1}}

Here is a pure function alternative:

DeleteCases[expr, _?(# == 0&),Infinity]

{{5}, {4, 1}, {3, 2}, {3, 1, 1}}

Cheers,
Paul
_________________________________________________________________
Paul Abbott
Department of Physics                       Phone: +61-9-380-2734
The University of Western Australia           Fax: +61-9-380-1014
Nedlands WA  6907                         paul at physics.uwa.edu.au
AUSTRALIA                           http://www.pd.uwa.edu.au/Paul
_________________________________________________________________

==== [MESSAGE SEPARATOR] ====

```