我正在尝试创建一个函数,该函数使用浮点数或任意嵌套浮点数列表的列表,并返回一个相同长度的列表,每个元素都被其平均值替换。
即。
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:])
有人能指出我正确的方向吗?
答案 0 :(得分:0)
我选择了迭代列表的路径,并且如果当前元素本身就是列表,则使用递归。我只检查过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]
。