Re: Find last NZ in list

• To: mathgroup at smc.vnet.net
• Subject: [mg46163] Re: Find last NZ in list
• From: carlos at colorado.edu (Carlos Felippa)
• Date: Mon, 9 Feb 2004 05:54:11 -0500 (EST)
• References: <200402060915.EAA19244@smc.vnet.net> <c02cp5\$54m\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Many thanks for the submissions.  Here is a comparison of five
functions and their timings on a mac g4.

FindLastNonzero[a_]:=Module[{n=Length[a]},
For [i=n,i>0,i--, If [a[[i]]==0,Continue[],Return[i],
Return[i]]]; Return[0]];  (* CAF *)
FindLastNonzero1[a_]:=Module[{n=Length[a]},
For [i=n,i>0,i--, If [a[[i]]!=0,Return[i],Continue[],
Return[i]]]; Return[0]];  (* CAF *)
FindLastNonzero2[a_]:=Catch[Do[If[a[[i]]=!=0,Throw[i]],{i,Length[a],1,-1}];0];
(* Andrzej Kozlowski *)
FindLastNonzero3[a_]:=First[Position[a, _?(# == 0 &)]] - 1;    (*
János Lobb *)
FindLastNonzero4[lst_]:=
Module[{tmp=DeleteCases[lst,0]},
If[Length[tmp]!=0,Last[tmp],0]  ];  (* Bo Le *)
FindLastNonZero5[liste_] :=
If[Position[(StringMatchQ[#1, "0"] & ) /@
ToString /@ liste, False] != {},
Last[Position[(StringMatchQ[#1, "0"] & ) /@
ToString /@ liste, False]][[1]], 0];  (* Florian Jaccard *)

nn=20000;  a=Table[0,{nn}]; a[[666]]=dante;
Print[Timing[FindLastNonzero  [a]]];
Print[Timing[FindLastNonzero1[a]]];
Print[Timing[FindLastNonzero2[a]]];
Print[Timing[FindLastNonzero3[a]]];    (* fails on this example *)
Print[Timing[FindLastNonzero4[a]]];    (* returns entry, not index *)
(* Print[Timing[FindLastNonzero5[a]]];  does not work *)

{0.55 Second,666}
{0.4 Second,666}
{0.133333 Second,666}
{0.2 Second,{0}}
{0.0333333 Second,dante}

FindLastNonzero4 is fastest but requires another Position search for
the entry index .  Of those that work in one shot, FindLastNonzero2 is
fastest.

The most elegant functional solution would be to say
i = FirstPosition[Reverse[a],!=0];
as a built in function.  But this doesnt exist.

```

• Prev by Date: Re: How to printout more digits?
• Next by Date: RE: Formal Definition of the Term "Form"
• Previous by thread: Re: Find last NZ in list
• Next by thread: Re: Re: Find last NZ in list