我是Python的初学者,我遇到了一些麻烦。我想编写一个函数,它返回一个用户定义列表中最接近该列表值平均值的元素。
例如,closest_to_average([0, 5, -1, 6, 1])
应返回1
,因为这些元素的平均值为2.2
,该列表中最接近2.2
的元素为{{1} }}
顺便说一句,我想只使用1
,len()
,循环,range()
- 语句,变量和算术(没有内置函数)。
这是我到目前为止的代码:
if
所以基本上,我的逻辑是,首先,变量平均值是指列表的平均值。然后每次循环运行时,它将找到i和平均值之间的差异,如果该差异小于先前的差异,它将继续检查所有元素,直到找到i元素,使得它与平均值之间的差异是最少的。
问题是我不知道如何设置初始距离!它必须比较第一个i和平均值之间的距离。因此我尝试设置diffo = 100,但我非常怀疑这是解决方案。
答案 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