如何在Python中查找列表内与指定数字最接近的数值
实现查找列表中最接近目标数值的Python函数
以下是两种符合需求的实现,可根据实际场景选择:
1. 匹配示例输出的实现:查找不小于目标值的最接近数值
你给出的示例返回380,对应需求为「找大于等于目标值的最接近数」,实现如下:
numbers = [1000, 999, 600, 476, 380, 280] number = 300 def get_most_next_number(numbers_list, number): # 先筛选所有大于等于目标值的数,再取最小值 valid_numbers = [n for n in numbers_list if n >= number] if not valid_numbers: # 无符合条件的数时可自定义返回逻辑,这里示例返回列表最大值 return max(numbers_list) return min(valid_numbers) print(get_most_next_number(numbers, number)) # 输出:380
2. 通用全局最接近数值实现(差值相同时返回较大的数)
如果需要找全局差值最小的数,差值相等时优先返回更大的数值,直接用min函数的key参数即可高效实现:
def get_most_next_number(numbers_list, number): # 排序规则:先按差值绝对值升序,再按数值本身降序(差值相等时取大的) return min(numbers_list, key=lambda x: (abs(x - number), -x)) # 测试场景:目标值为330时,280和380差值均为50,会优先返回更大的380 print(get_most_next_number(numbers, 330)) # 输出:380
小提示:如果需要差值相等时返回更小的数,把key里的
-x改成x即可。
内容的提问来源于stack exchange,提问作者CauaSCP
相关产品推荐
相关产品推荐

