例如,我有一个数字列表,例如
lst = [1, 2, 3, 3, 4, 4, 5, 6, 7, 8, 9]
我需要2个数字,离给定数字3个距离,例如5个,因此输出列表应如下所示
output_lst = [2, 8]
这里的距离是指数字线上的距离,而不是列表索引中的距离。所以3个数字,2与5的距离将得出
output_lst = [3,3,7]
我很累的是像这样使用来自heapq的nsmallest
check_number = 5
output_lst = nsmallest(3, lst, key=lambda x: abs(x - check_number))
但是这里的问题是我不知道指定距离。它只会输出3个最接近5的数字。
[4,4,5]
您可以为此使用列表理解。有关列表理解的更多信息,请参见这篇文章。
>>> lst = [1, 2, 3, 3, 4, 4, 5, 6, 7, 8, 9]
>>> given_numer = 5
>>> distance = 3
>>> [i for i in lst if abs(i-given_numer)==distance]
[2, 8]
逻辑很简单,我们仅查看每个数字与给定数字之间的差的绝对值,如果是,则返回该值。相似地
>>> distance = 2
>>> [i for i in lst if abs(i-given_numer)==distance]
[3, 3, 7]
让我们复杂一点并尝试使用filter
和闭包。代码是:
只是为了证明这是另一种选择。
def checkdistance(given_number,distance):
def innerfunc(value):
return abs(value-given_number)==distance
return innerfunc
lst = [1, 2, 3, 3, 4, 4, 5, 6, 7, 8, 9]
given_number = 5
distance = 3
checkdistance3from5 = checkdistance(5,3)
list(filter(checkdistance3from5,lst))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句