从整数列表中,得到与给定值最接近的高和低的数

  • 本文关键字:最接近 列表 整数 python list
  • 更新时间 :
  • 英文 :


我想用两个函数得到以下输出:

>>> myList = [25, 35, 57, 61, 79]
>>> myNumber = 38
>>> take_closest_high(myList, myNumber)
...
57
>>> take_closest_low(myList, myNumber)
35
...

列表不一定是有序的。

谢谢你!

我从另一个话题看到了这个解决方案

min(myList, key=lambda x:abs(x- mynumber))

返回列表中最接近的数字

编辑:我让它工作与以下。谢谢!

min(myList, key=lambda x:abs(x-38) if x-38>0 else x)
Out[8]: 57
min(myList, key=lambda x:abs(x-38) if x-38<0 else x)
Out[9]: 35

为了获得最接近的最大值,对myList进行筛选,使其所有元素都大于myNumber,并返回最小的值。

def take_closest_high(myList, myNumber) :
filteredHigh = list(filter(lambda x : x>myNumber, myList))
if filteredHigh==[] :
return None
return min(filteredHigh)

为了得到最接近的低值,对myList进行过滤,使其所有元素都低于myNumber,并返回最大值。

def take_closest_low(myList, myNumber) :
filteredLow = list(filter(lambda x : x<myNumber, myList))
if filteredLow==[] :
return None
return max(filteredLow)

Using min &最大与默认的生成器。默认为空列表提供值。

def take_closest_high(myList, myNumber):
# Min over numbers in list >= myNumber
return min((x for x in myList if x >= myNumber), default = None)
def take_closest_low(myList, myNumber):
# Max over numbers in list <= myNumber
return max((x for x in myList if x <= myNumber), default = None)

最新更新