Re: First nonzero in list
- To: mathgroup at smc.vnet.net
- Subject: [mg110848] Re: First nonzero in list
- From: Leonid Shifrin <lshifr at gmail.com>
- Date: Thu, 8 Jul 2010 06:50:56 -0400 (EDT)
- References: <201007080713.DAA07701@smc.vnet.net>
Hi Steve, Here are a couple of ways: In[6]:= inp = {227, 342, 527, 0, 670, 730, 703, 0, 0, 649, 687, 614, 570, 501, 462, 402, 325, 254, 189, 99, 81, 36, 9, 8, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; In[8]:= inp /. {x___, 0 ..} :> Length[{x}] Out[8]= 25 In[10]:= Length[inp] - LengthWhile[Reverse[inp], # == 0 &] Out[10]= 25 The first solution is more elegant but impractical for large lists. The second is reasonably efficient also for large lists. There are many more solutions of course. Hope this helps. Regards, Leonid On Thu, Jul 8, 2010 at 11:13 AM, S. B. Gray <stevebg at roadrunner.com> wrote: > I have lists such as > > th = {227, 342, 527, 0, 670, 730, 703, 0, 0, 649, 687, 614, 570, 501, > 462, 402, 325, 254, 189, 99, 81, 36, 9, 8, 3, 0, 0, 0, 0, 0, 0, 0, > 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, > 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} > > and I want to find the position of the last nonzero element (e.g. 3 at > position 25). Trivial, but some poking around did not reveal a neat way. > > Anyone? Thank you. > > Steve Gray > >
- References:
- First nonzero in list
- From: "S. B. Gray" <stevebg@ROADRUNNER.COM>
- First nonzero in list