求任意嵌套列表列表中每个元素的平均值
Find the average of each element in a list of arbitrarily nested lists
我正在尝试制作一个函数,该函数接受一个列表,其中的元素可以是浮点数或任意嵌套的浮点数列表,returns 一个长度相同的列表,每个元素都被其平均值替换。
即。
lst = [1,[2,[3,[4,[5]]]]] #average of lst[0] = 1 average of lst[1] = (((((4+5)/2)+3)/2)+2)/2
print(Avg(lst))
应该打印 [1,2.875]
这是我到目前为止得到的:
def Avg(lst,n=1):
if lst = [] and n > 1:
return 0
elif lst = []:
return lst
elif type(lst) == float:
return lst
elif type(lst[0]) == float and n > 1:
return (lst[0] + Avg(lst[1:]))/len(lst)
elif type(lst[0]) == list:
total = 0
length = 0
for e in lst[0]:
total += Avg(e)
length += 1
return [total/length] + Avg(lst[1:])
return [lst[0]] + Avg(lst[1:])
有人能给我指出正确的方向吗?
我选择了遍历列表的方式,如果当前元素本身就是一个列表,则使用递归。我只检查了 float
或 int
来确定某些东西是否是数字,但如果需要的话很容易扩展,因为它在一个函数中是孤立的。
事不宜迟:
def is_numeric(item):
return type(item) == float or type(item) == int
def Avg(something):
if is_numeric(something):
return something
for i, element in enumerate(something):
if not is_numeric(element):
sub_element = Avg(element)
l = len(sub_element)
something[i] = sum(sub_element) / l if l > 0 else 0
return something
print(Avg([1,[2,[3,[4,[5]]]]]))
产生 [1, 2.875]
.
我正在尝试制作一个函数,该函数接受一个列表,其中的元素可以是浮点数或任意嵌套的浮点数列表,returns 一个长度相同的列表,每个元素都被其平均值替换。
即。
lst = [1,[2,[3,[4,[5]]]]] #average of lst[0] = 1 average of lst[1] = (((((4+5)/2)+3)/2)+2)/2
print(Avg(lst))
应该打印 [1,2.875]
这是我到目前为止得到的:
def Avg(lst,n=1):
if lst = [] and n > 1:
return 0
elif lst = []:
return lst
elif type(lst) == float:
return lst
elif type(lst[0]) == float and n > 1:
return (lst[0] + Avg(lst[1:]))/len(lst)
elif type(lst[0]) == list:
total = 0
length = 0
for e in lst[0]:
total += Avg(e)
length += 1
return [total/length] + Avg(lst[1:])
return [lst[0]] + Avg(lst[1:])
有人能给我指出正确的方向吗?
我选择了遍历列表的方式,如果当前元素本身就是一个列表,则使用递归。我只检查了 float
或 int
来确定某些东西是否是数字,但如果需要的话很容易扩展,因为它在一个函数中是孤立的。
事不宜迟:
def is_numeric(item):
return type(item) == float or type(item) == int
def Avg(something):
if is_numeric(something):
return something
for i, element in enumerate(something):
if not is_numeric(element):
sub_element = Avg(element)
l = len(sub_element)
something[i] = sum(sub_element) / l if l > 0 else 0
return something
print(Avg([1,[2,[3,[4,[5]]]]]))
产生 [1, 2.875]
.