2014-12-03 2 views
1

Итак, я пытаюсь создать функцию рекурсии, где он берет каждый элемент в списке и суммирует его вообще, теперь я знаю, что theres простая встроенная функция sum (a), но я пытаюсь работать с вложенными списками, такими как this ниже, но я все время получаю ошибку.Функция, которая суммирует значения вложенных списков?

def sumList(): 
    list2 = [1, [2, 3,[4, 5, 6], 7, [8, [9, 10]], 11]] 
    newlist = [] 
    lol = 0 
    for i in range (len(list2)): 

     if type(list2[i]) == type([]): 
      print list2[i], "here" 
      for i in range (len(list2[i])): 
       lol += (len(list2[i])) 



      newlist.append(i[:len(i)+1]) 


     if len(list2)==0: 
      return None 
     else: 
      print list2[i] 
      lol+=list2[i] 


    print lol 

sumList() 

Теперь я знаю, что у меня есть много, реализованный в программе, что я себе представить не требуется, но ошибка я держать получаю

1 
[2, 3, [4, 5, 6], 7, [8, [9, 10]], 11] here 


TypeError: object of type 'int' has no len() 

ответ

1

В общем, вы могли бы сгладить ваши список списков и поиск мин в сплющенном списке. Существует много рецептов для выравнивания. Ниже я получил от here.

import collections 

def flatten(iterable): 
    for el in iterable: 
     if isinstance(el, collections.Iterable) and not isinstance(el, str): 
      yield from flatten(el) 
     else: 
      yield el 

list2 = [2, 3, [4, 5, 6], 7, [8, [9, 10]], 11] 

print(list(flatten(list2))) 
# [2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 
print(sum(flatten(list2))) 
# 65 
0
# Python 2.7 
def recursiveSum(data): 
    # This naively assumes that if it's not an int, it's a list 
    # You may want to add more error handling if you expect dirtier data 
    if isinstance(data, int): return data 
    mySum = 0 
    for i in data: mySum += recursiveSum(i) 
    return mySum 

list2 = [1, [2, 3,[4, 5, 6], 7, [8, [9, 10]], 11]] 
print recursiveSum(list2) # Should get 66 
+0

Я получил выход только один – MrPorba

+0

я не могу продублировать свой результат - по-прежнему приходит 66 для меня. Какая версия Python? – rchang

1
def r_sum(mylist,nsum=0): 
    for i in mylist: 
     if isinstance(i,int): 
      nsum += i 
     else: 
      nsum += r_sum(i) 
    return nsum 
Смежные вопросы