[Tutor] Efficiency and speed

Steven D'Aprano steve at pearwood.info
Sat Mar 20 18:17:15 CET 2010


On Sat, 20 Mar 2010 05:47:45 am James Reynolds wrote:

> This is a monte-carlo simulation.
>
> The simulation measures the expiration of something and those
> somethings fall into bins that are not evenly dispersed. These bins
> are stored in the nx list mentioned previously.
>
> So let's say you have the bins, a, b,c,d,e,f and you have the value z
> from the sample list where z >b and <= a. In this case, it should
> return the index value at position (a).

I'm not sure I understand completely. An example might help. I *think* 
you have a list like this:

nx = [10.0, 9.0, 7.0, 3.0, 2.0, 1.0]

and if you have a value like z = 9.8 you want to return the index 0. 
Correct?

That seems a bit funny. In my experience it is normal to have the bins 
in the opposite direction. I suppose it probably doesn't matter that 
much, but it does seem a bit unusual.

If nx is fairly short (say, less than 40 or 50 items), then the fastest 
way is probably a linear search, something like this:

def search_bins(nx, z):
    """Search bins nx for item z.

    >>> bins = [5.0, 4.0, 2.0, 1.0]
    >>> search_bins(bins, 1.2)
    2

    If z is not in the bins, returns -1:

    >>> search_bins(bins, 5.1)
    -1

    """
    for i, value in enumerate(nx):
        if z > value:
            return i-1
    return -1




-- 
Steven D'Aprano


More information about the Tutor mailing list