python:从整数列表中获取最接近给定值的数字

        突然忘了我为啥要找这个

方法1

a = [1,4,5,7,31,42,112,175,198,465]
b = 35
print(min(a, key=lambda x: abs(x - b)))

        复杂度有点高,但是不要求列表有序,只要有个列表、有个目标值就行

        返回索引

def closest(mylist, Number):
    answer = []
    for i in mylist:
        answer.append(abs(Number-i))
    return answer.index(min(answer))

方法2

from bisect import bisect_left

def takeClosest(myList, myNumber):
    """
     Assumes myList is sorted. Returns closest value to myNumber.
     If two numbers are equally close, return the smallest number.
     If number is outside of min or max return False
    """
    if (myNumber > myList[-1] or myNumber < myList[0]):
        return False
    pos = bisect_left(myList, myNumber)
    if pos == 0:
            return myList[0]
    if pos == len(myList):
            return myList[-1]
    before = myList[pos - 1]
    after = myList[pos]
    if after - myNumber < myNumber - before:
       return after
    else:
       return before

a = [1,4,5,7,31,42,112,175,198,465]
b = 35
answer = takeClosest(a, b)
print(answer)

        时间复杂度比较低,二分方法,但要求列表有序

猜你喜欢

转载自blog.csdn.net/qq_43657442/article/details/109059070