【问题标题】:Find the closest elements above and below a given number查找给定数字上方和下方最接近的元素
【发布时间】:2016-03-29 04:29:49
【问题描述】:
myArr = array([4,1,88,44,3])
myNumber = 25
FindClosest(myArr, myNumber)
...
4, 44

有没有办法在列表中找到与给定数字最接近的 2 个数字,使得其中一个更高而另一个更低?

我可以通过以下方式找到最接近的号码:

min(myArr.tolist(), key=lambda x:abs(x-myNumber))

【问题讨论】:

  • 减法、排序和弹出!
  • 你为什么期望得到4488?这两个都高于目标。大概你想要444
  • 感谢@ShadowRanger,已更正 q

标签: python numpy


【解决方案1】:

排序不是必需的,并且使这个时间复杂度 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

【讨论】:

  • 我必须赞扬你应用的逻辑清晰
【解决方案2】:
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))

【讨论】:

    【解决方案3】:
    first = min([i for i in myArr if a>i])
    second = max([i for i in myArr if a<i])
    

    另外,正确答案是44, 4 不是44, 88

    【讨论】:

    • 这并不能保证得到一个更大和一个更小,只有两个最接近。
    【解决方案4】:

    我有一个答案可以找到与输入值最接近的 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 程序。希望有帮助!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多