python输入多个数字 找出只出现一个的数字_在python数组中找到接近给定数字的多个值...

如果按照元素远离枢轴的顺序对数组进行排序,那么您将能够获取前k个元素,这些元素最接近您正在查看的元素

def k_closest(sample, pivot, k):

return sorted(sample, key=lambda i: abs(i - pivot))[:k]

例:

>>> l = [1,2,3,4]

>>> k_closest(l, 3, 2)

[3,2]

>>> k_closest(l, 3, 3)

[3,2,4]

要获取元素的索引,您可以这样做:

def k_closest(sample, pivot, k):

return sorted(enumerate(sample), key=lambda (n, v): abs(v - pivot))[:k]

使用与以前相同的元素运行它,我们得到

>>> l = [1,2,3,4]

>>> k_closest(l, 3, 2)

[(2, 3), (1, 2)]

>>> k_closest(l, 3, 3)

[(2, 3), (1, 2), (3, 4)]

对于列表中的每个元组,第一个元素是原始数组中的索引,第二个元素是您实际感兴趣的数字

如果您只想要索引,可以稍微调整一下该函数

import operator

def k_closest(sample, pivot, k):

return map(operator.itemgetter(0), sorted(enumerate(sample), key=lambda (n, v): abs(v - pivot)))[:k]

运行原始输入,现在将给你

>>> k_closest(l, 3, 2)

[2, 1]

>>> k_closest(l, 3, 3)

[2, 1, 3]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值