试图创建一个函数来查找数组中最接近的数字


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

到目前为止,这是我写的一种寻找最接近数字的方法,但它似乎不正确。形式参数是这样的,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 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

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

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]]

最新更新