[EMAIL PROTECTED] wrote:
> Hi,
> 
> Can anybody tell me how to to find the nearest value to zero in a list
> ?
> 
> To do that, i'm using list comprenhension :
> 
>>>> foo = [-5,-1,2,3] # nearest value to zero ?
>>>> [value for value in foo if math.fabs(value) == min([int(math.fabs(x)) for 
>>>> x in foo])]
> [-1]
> 
> Something simpler ?
> How to extend this function to any given value ?
> 
> Thanks,
> 
> CH.
> 

One of I'm sure many ways:

import sys
def closest(value, list):
    m=None
    mdistance=sys.maxint
    for entry in list:
        distance=abs(value-entry)
        if distance < mdistance:
            m=entry
            mdistance=distance
    return m

if __name__ == "__main__":
    foo = [-5,-1,2,3]
    print closest(0, foo)

Note: If you know that the list is ordered you can break out of the
loop you can optimize the loop by breaking out when you start getting
further away from value or you might be able to use the bisect module
to find it faster.  If the lists are small it probably isn't worth
the extra effort.  If they are large and sorted look at bisect.

Question: what if two values are equidistant?

-Larry bATES
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to