Find the closest elements above and below a given number

myArr = array([4,1,88,44,3])
myNumber = 25
FindClosest(myArr, myNumber)
...
4, 44

Is it possible to find the closest 2 numbers in the list to the specified number so that one of them is higher and the other is lower?

I can find the nearest number:

min(myArr.tolist(), key=lambda x:abs(x-myNumber))
+4
source share
4 answers

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

I believe this is what you are looking for using 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
+10
source
first = min([for i in myArr if a>i])
second = max([for i in myArr if a<i])

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

+2
source

I have an answer to find the 2 closest numbers to the input value, see 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()

it is a pure python program. Hope this helps!

+1
source
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
source

All Articles