2017-03-19 1 views
0

플로트 또는 임의로 중첩 된 수레 목록 인 요소를 사용하여 목록을 취하고 같은 길이의 목록을 반환하는 함수를 만들려고합니다. 각 요소는 평균으로 대체됩니다.임의로 중첩 된 목록의 각 요소의 평균 찾기

즉. [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]을 생산하고 있습니다.

관련 문제