Find the closest elements above and below a given number

前端 未结 4 1492
小鲜肉
小鲜肉 2020-12-15 00:47
myArr = array([4,1,88,44,3])
myNumber = 25
FindClosest(myArr, myNumber)
...
4, 44

Is there any way to find the closest 2 numbers in a list to a giv

相关标签:
4条回答
  • 2020-12-15 01:10
    first = min([i for i in myArr if a>i])
    second = max([i for i in myArr if a<i])
    

    Also, the correct answer is 44, 4 not 44, 88

    0 讨论(0)
  • 2020-12-15 01:10

    I have an answer to find the 2 closest numbers to the input value, please see the program below :-

    from collections import OrderedDict
    
    
    def find_closer():
        a = [9, 19, 87, 43, 10]
        b = int(input("Enter number :"))
        # diff_list = []
        diff_dict = OrderedDict()
        if b in a:
            b = input("Number already exists, please enter another number ")
        else:
            for x in a:
                diff = x - b
                if diff < 0:
                    # diff_list.append(diff*(-1))
                    diff_dict[x] = diff*(-1)
                else:
                    # diff_list.append(diff)
                    diff_dict[x] = diff
        print("diff_dict", diff_dict)
        # print(diff_dict[9])
        sort_dict_keys = sorted(diff_dict.keys())
        print(sort_dict_keys)
        closer_less = 0
        closer_more = 0
        for closer in sort_dict_keys:
            if closer < b:
                closer_less = closer
            else:
                closer_more = closer
                break
        print("closer less =", closer_less, "and closer more =", closer_more)
    
    
    find_closer()
    

    this a pure python program. Hope it helps !!

    0 讨论(0)
  • 2020-12-15 01:25

    Sorting is not necessary, and makes this time complexity O(n logn) when it should be just O(n).

    I believe this is what you're looking for, taking advantage of numpy array indexing:

    >>> # the smallest element of myArr greater than myNumber
    >>> myArr[myArr > myNumber].min()  
    44
    
    >>> # the largest element of myArr less than myNumber
    >>> myArr[myArr < myNumber].max()
    4
    
    0 讨论(0)
  • 2020-12-15 01:30
    upper = min([ i for i in myArr.tolist() if i >= myNumber], key=lambda x:abs(x-myNumber))
    lower = min([ i for i in myArr.tolist() if i < myNumber], key=lambda x:abs(x-myNumber))
    
    0 讨论(0)
提交回复
热议问题