2017-03-19 9 views
0

浮動小数点数の任意のネストされた要素を持つリストを取得する関数を作成しようとしていて、各要素はその平均で置き換えられます。任意のネストされたリストのリスト内の各要素の平均を求める

ie。 [1,2.875]印刷する必要があります ここ 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)) は、私がこれまでに得たものです:

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

リストを反復するルートを選択し、現在の要素自体がリストであった場合は再帰を使用しました。私は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]を生成します。

関連する問題