Re: Position of Last Element in List
- To: mathgroup at smc.vnet.net
- Subject: [mg94182] Re: Position of Last Element in List
- From: Mark Westwood <markc.westwood at gmail.com>
- Date: Sat, 6 Dec 2008 06:18:14 -0500 (EST)
- References: <ghb02f$oho$1@smc.vnet.net>
Hi Raffy I'm sure I've missed something about your example, but here goes: -- running your example code gives a time of 18.7s on my machine, cut to about 3.5s by Szabolcs code. -- my naive implementation -- Timing[Position[Range[1000000], 900000]] -- takes 0.25s to find all occurrences of the test value in the test list, in this case 1 -- if I try a more demanding variation, such as Timing[Position [RandomChoice[Range[1000000], 1000000], 900000]] -- my computer takes about 0.35s, whether there are 0, 1 or 2 occurrences of 900000 in the random list; note that in this variation the timing includes the generation of the unsorted list -- OK, so the list may not be flat, so create a test example outside the timed section: rlist = Partition[RandomChoice[Range[1000000], 1000000], 7]; and try Timing[Position[rlist, 900000]] which on my PC gives the output {0.328, {{81644, 4}}} Sure, that's not at the 1st level, but your Mathematica now has ~20s to figure out what depth that's at and reject any which don't conform to your selection criteria Still puzzled, still think I'm missing the point Regards Mark Westwood On 5 Dec, 10:33, Raffy <ra... at mac.com> wrote: > I'm looking for the fastest way to find the last position of an > element at level 1 in a list. > > The fastest way, which is still extremely bloated and extremely slow, > appears to be: > > lastPos[v_List,p_:True,default_:$Failed]:=( > $Temp=Position[Reverse[v],p,{1},1,Heads->False]; > If[Length[$Temp]>0,$Temp[[1,1]],default] > ); > > Any suggestions? > > Use the following code to compare against lastPos: > > v = Range[1000000]; > Do[lastPos[v,900000],{100}]//Timing