Python - 循环播放(最接近平均值)

时间:2015-10-29 01:31:49

标签: python

我是Python的初学者,我遇到了一些麻烦。我想编写一个函数,它返回一个用户定义列表中最接近该列表值平均值的元素。

例如,closest_to_average([0, 5, -1, 6, 1])应返回1,因为这些元素的平均值为2.2,该列表中最接近2.2的元素为{{1} }}

顺便说一句,我想只使用1len(),循环,range() - 语句,变量和算术(没有内置函数)。

这是我到目前为止的代码:

if

所以基本上,我的逻辑是,首先,变量平均值是指列表的平均值。然后每次循环运行时,它将找到i和平均值之间的差异,如果该差异小于先前的差异,它将继续检查所有元素,直到找到i元素,使得它与平均值之间的差异是最少的。

问题是我不知道如何设置初始距离!它必须比较第一个i和平均值之间的距离。因此我尝试设置diffo = 100,但我非常怀疑这是解决方案。

3 个答案:

答案 0 :(得分:2)

好吧,如果你可以使用min,它就会变成

def closest_to_average(lst):
    avg = sum(lst) / len(lst)
    return min(lst, key = lambda x: abs(avg - x))

在您的示例中,将disto设置为任意任意数字是一个坏主意,因为它可能小于实际答案。为什么不将它设置为列表中的第一项呢?你知道这至少可能是正确答案。

答案 1 :(得分:1)

def closest_to_average(xs):
    avg = sum(xs)/len(xs)
    closest = 0
    for i in xs:
        diff = abs(avg - i)
        if diff < abs(avg - closest):
            closest = i
    return closest 

print(closest_to_average([0, 5, -1, 6, 1]))
print(closest_to_average([1, 11474, 1004]))
print(closest_to_average([2, 2, 2, 2, 2]))
print(closest_to_average([2, 1, 0, -9, 9]))

我为此包含了一些案例;这满足了你的需求吗?

我在手机上冲了过去;对不起,如果没有经过全面测试。

答案 2 :(得分:1)

这个怎么样:

def closest_to_average(xs):
    avg = sum(xs)/len(xs)
    min_diff = None
    closest = None
    for i in xs:
        diff = abs(avg - i)
        if min_diff is None or diff < min_diff:
            min_diff = diff
            closest = i
    return closest