Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a list containing zero and nonzero elements. How can I throw away zero elements and just keep non zero ones.

share|improve this question
Cases[{0, f, y, e, 1, 2, 3}, Except[0]] – Rorschach Feb 26 '14 at 15:46
DeleteCases[list,0] – Coolwater Feb 26 '14 at 16:12
Instead of either of the two suggestions above, I recommend Select[list, # != 0 &] for the reason that pattern matching differentiates between 0. and 0 while == has a small tolerance even for machine precision zeros. Pattern matching can be fixed by using 0|0. in place of 0. – Szabolcs Feb 26 '14 at 16:16
up vote 6 down vote accepted


Select[list, # != 0 &]

for the simplest solution.

A non-obvious solution that can be quite fast (for versions $\ge 8$), especially for packed arrays, is

Pick[list, Unitize[list], 1]

This'll give you better performance than Select.

A warning about pattern matching: it differentiates between exact 0 and inexact 0., thus

In[2]:= DeleteCases[{0., 0, 1}, 0]
Out[2]= {0., 1}

In[3]:= DeleteCases[{0., 0, 1}, 0.]
Out[3]= {0, 1}

You can use the pattern 0|0. but using comparison (== or !=) is both clearer and == allows for greater differences from zero (that might arise due to numerical roundoff errors during calculations) than === and pattern matching. So I recommend ==. (You might google for Internal`$EqualTolerance and Internal`$SameQTolerance if you wish to learn about these tolerances.)

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.