MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

RE: Find last NZ in list

  • To: mathgroup at
  • Subject: [mg46114] RE: [mg46102] Find last NZ in list
  • From: "Florian Jaccard" <florian.jaccard at>
  • Date: Sat, 7 Feb 2004 04:01:57 -0500 (EST)
  • Reply-to: <florian.jaccard at>
  • Sender: owner-wri-mathgroup at

Does this do it ?

findLastNonZero[liste_] :=
  If[Position[(StringMatchQ[#1, "0"] & ) /@
      ToString /@ liste, False] != {},
   Last[Position[(StringMatchQ[#1, "0"] & ) /@
       ToString /@ liste, False]][[1]], 0]


-----Message d'origine-----
De : Carlos Felippa [mailto:carlos at]
Envoyé : ven., 6. février 2004 10:15
À : mathgroup at
Objet : [mg46102] Find last NZ in list

This is kind of an "esthetics" question.  In a program I am writing
I need to find the last nonzero entry of a  1D list millions of
times.  For example FindLastNonzero[{1,2,3,4,0,a,b-b,0,0}] -> 6,
and FindLastNonzero[{0,0,0,0,0,0,0}] -> 0.
Here are two ugly C-style implementations:

     For [i=n,i>0,i--, If [a[[i]]==0,Continue[],Return[i],Return[i]]];

     For [i=n,i>0,i--, If [a[[i]]!=0,Return[i],Continue[i],Return[i]]];

Is there a built-in function, or something more elegant,
available to do this job?  Find only works for text streams.

Note that the If case "cannot tell if  entry is NZ" is important for
symbolic lists.  That case should be evaluated as NZ.

  • Prev by Date: Re: Find last NZ in list
  • Next by Date: What is ListConvolve doing here?
  • Previous by thread: Re: Find last NZ in list
  • Next by thread: Re: Find last NZ in list