Python 尝试创建一个函数,该函数可以查找数组中最接近的数字
这是我写的一个找到最接近的数字的方法,但它似乎不正确。形式参数如下:x是列表,y是查找最接近的数字的数字,z是该列表中与y最接近的数字的数量 例如[1,2,3,4,5,6,7,8,9,10]=x,5=y,3=zPython 尝试创建一个函数,该函数可以查找数组中最接近的数字,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)
这应该会产生[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]]