myArr = array([4,1,88,44,3])
myNumber = 25
FindClosest(myArr, myNumber)
...
4, 44
有没有办法在一个列表中找到离给定数字最近的两个数,使其中一个数比它高,另一个数比它低?
我可以按以下方式找到最接近的数字:
min(myArr.tolist(), key=lambda x:abs(x-myNumber))
排序并不是必要的,这会使得时间复杂度变成了O(n logn),而实际上可以做到O(n)。
我相信这就是你所需要的,利用numpy数组索引的优势:
>>> # 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
above = min([i for i in myArr if myNumber < i])
below = max([i for i in myArr if myNumber > i])
44, 4
而不是44, 88
。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))
我有一个答案,可以找到最接近输入值的2个数字,请参见下面的程序:
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()
这是一个纯Python程序。希望它能有所帮助!