An example of using a filter, map, and recursion:
def islist(x): return isinstance(x, list) def notlist(x): return not isinstance(x, list) def nested_sum(seq): return sum(filter(notlist, seq)) + map(nested_sum, filter(islist, seq))
And here is an example of using reduction and recursion
from functools import reduce def nested_sum(seq): return reduce(lambda a,b: a+(nested_sum(b) if isinstance(b, list) else b), seq)
An example of using plain old recursion:
def nested_sum(seq): if isinstance(seq[0], list): head = nested_sum(seq[0]) else: head = seq[0] return head + nested_sum(seq[1:])
An example of using simulated recursion:
def nested_sum(seq): stack = [] stack.append(seq) result = 0 while stack: item = stack.pop() if isinstance(item, list): for e in item: stack.append(e) else: result += item return result
The adjustment for processing self-reference lists is left as an exercise for the reader.
source share