从列表中查找其平均值最接近python中给定数字的列表?

从列表中查找其平均值最接近python中给定数字的列表?,python,Python,给定l=[[3,4,5],[30,40,50],[300400500]]和一个数字45 傻瓜,45应该返回[30,40,50],因为它的平均值最接近45 编写这样一个函数foo的好方法是什么 编辑: 这是我的密码。。还没有测试 def _avg(l): return reduce(lambda x,y: x+y, l)/len(l) def foo(clusters, point): return min(clusters, key=lambda x: abs( _avg(x

给定l=[[3,4,5],[30,40,50],[300400500]]和一个数字45

傻瓜,45应该返回[30,40,50],因为它的平均值最接近45

编写这样一个函数foo的好方法是什么

编辑:

这是我的密码。。还没有测试

def _avg(l):
    return reduce(lambda x,y: x+y, l)/len(l)

def foo(clusters, point):

    return min(clusters, key=lambda x: abs( _avg(x) - point) )
查找生成abssublist_average-target_average值的生成器表达式的最小值


在纸上你会怎么做?首先计算第一个距离的平均值,取差值,并保存到目前为止最小距离的索引。最简单的解决方案,可能是最好的、最容易理解的解决方案。

写得非常详细

import sys
def closest_average_to_num (list_of_lists, num):
    closest_list = []
    lowest_diff = sys.maxint
    for list_of_interest in list_of_lists:
        avg = sum(list_of_interest) / float(len(list_of_interest))
        if (lowest_diff > abs(avg - num)):
             lowest_diff = abs(avg - num)
             closest_list = list_of_interest
    return closest_list
示例输出:


你知道你需要展示你自己尝试过的吗@阿什:你认为这就是投-4票的原因吗?因为我没想到。是的,大部分情况下,很好,你已经编辑了。删除我的否决票:谢谢你的回答。两条评论:1你想用floatlenl除法以避免遇到整数除法的问题试试foo[[30,40,50],[31,40,50]],45看看我的意思;2.使用sum而不是reduce。这里是一个单行程序版本的解决方案def fooclusters,point:return minclusters,key=lambda li:abssumli/floatlenli-pointOkayish trunt@davecom,但是如果不想测试代码,您应该只声明伪代码而不是编写实际的python代码。
import sys
def closest_average_to_num (list_of_lists, num):
    closest_list = []
    lowest_diff = sys.maxint
    for list_of_interest in list_of_lists:
        avg = sum(list_of_interest) / float(len(list_of_interest))
        if (lowest_diff > abs(avg - num)):
             lowest_diff = abs(avg - num)
             closest_list = list_of_interest
    return closest_list
>>> closest_average_to_num ([ [3,4,5], [30,40,50], [300,400,500] ], 45)
[30, 40, 50]