Search code examples
pythonlistpython-3.3

sum of nested list in Python


I try to sum a list of nested elements

e.g, numbers=[1,3,5,6,[7,8]] should produce sum=30

I wrote the following code :

def nested_sum(L):
    sum=0
    for i in range(len(L)):
       if (len(L[i])>1):
          sum=sum+nested_sum(L[i])
       else:
          sum=sum+L[i]
    return sum

The above code gives following error:

object of type 'int' has no len()

I also tried len([L[i]]), still not working.

Anyone can help? It is Python 3.3


Solution

  • You need to use isinstance to check whether an element is a list or not. Also, you might want to iterate over the actual list, to make things simpler.

    def nested_sum(L):
        total = 0  # don't use `sum` as a variable name
        for i in L:
            if isinstance(i, list):  # checks if `i` is a list
                total += nested_sum(i)
            else:
                total += i
        return total