Python 尝试创建一个函数,该函数可以查找数组中最接近的数字

Python 尝试创建一个函数,该函数可以查找数组中最接近的数字,python,Python,这是我写的一个找到最接近的数字的方法,但它似乎不正确。形式参数如下:x是列表,y是查找最接近的数字的数字,z是该列表中与y最接近的数字的数量 例如[1,2,3,4,5,6,7,8,9,10]=x,5=y,3=z 这应该会产生[5,4,6]这里是对您的方法的一个轻微修改 首先对x进行排序,根据元素与y的“接近程度”对元素进行排序。然后,枚举排序的对象,收集z元素,然后停止并返回收集的项目 def deze(x,y,z): nw = map(lambda q: abs(q-y),x)

这是我写的一个找到最接近的数字的方法,但它似乎不正确。形式参数如下:x是列表,y是查找最接近的数字的数字,z是该列表中与y最接近的数字的数量

例如[1,2,3,4,5,6,7,8,9,10]=x,5=y,3=z


这应该会产生[5,4,6]

这里是对您的方法的一个轻微修改

首先对
x
进行排序,根据元素与
y
的“接近程度”对元素进行排序。然后,枚举排序的对象,收集
z
元素,然后停止并返回收集的项目

def deze(x,y,z):
    nw = map(lambda q: abs(q-y),x)

    minimum = min(nw)

    anw = []
    for i,val in enumerate(x):
        if val == minimum:
            anw.append(i)

    final = []
    for i in an:
        final.append(x[i])

    return final

这解决了您的问题,但请记住,如果您在我们的列表中有重复项,例如2
5
,那么您实际上将有两个数字0位(都是5位)和两个数字1位(4和6位)。此代码将返回两个中较低的数字

def nn(x,y,z):
    closest = sorted(x, key=lambda i: abs(i-y))
    ans = []
    for count, item in enumerate(closest):
        if count == z:
            break
        ans.append(item)
    return ans

你的错误是什么?意外的结果是什么?我看到一个可能的输入错误:
,因为我在:
。。。你可能想要
为i输入anw:
。没有错误,它只是给出了错误的输出。我似乎不知道如何首先快速排序列表,然后查找与x最接近的数字,以及我应该找到多少个,哪个是z。你得到的输出是什么,它是怎么错的?快速看一眼,我看不到任何能提供
z
值的东西。你不是只需要做
final.append(len(anw))
?0如果列表中有忏悔数字,该怎么办?如果4个数字与
y
z=3的距离相等,该怎么办
y = 5
z = 3
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def nn(x,y,z):
    d = [(n, abs(n - y)) for n in sorted(x)]
    out = sorted(d, key=lambda x: x[1])
    return [x[0] for x in out[:z]]