具有递归的多维列表中的整数总和

时间:2018-11-17 12:42:48

标签: python list recursion

通过递归计算python多维列表中包含的整数之和。

list = [1, 8, [6, 4, 8, 9] 1, [4, 6, 9, 0], 5, 6]

def listsum(numList):
   if len(numList) == 1:
        return numList[0]
   else:
        return numList[0] + listsum(numList[1:])

print(listsum(list))

我确定多维列表中存在问题。如何修复代码?

2 个答案:

答案 0 :(得分:1)

好吧,这可以通过简单的递归函数轻松完成:

def sum_it(l):
  if (isinstance(l, int)):
    return l
  elif (isinstance(l, list)):
    return sum(sum_it(elm) for elm in l)

要点
1. isinstance用于类型检查。
2. sum对给定的可迭代元素进行求和

修改:
如果您不允许使用sum,那么也可以使用for循环:

def sum_it(l):
  if (isinstance(l, int)):
    return l
  elif (isinstance(l, list)):
    res = 0
    for elm in l:
      res += sum_it(elm)
    return  res

编辑2: 如果出于某些可笑的原因甚至不允许您使用isinstance,则可以使用异常处理,但我建议您使用它,因为它会使整个过程变得不那么易读,也更混乱它必须是:

def sum_it(l):
  try:
    res = 0
    for elm in l:
      res += sum_it(elm)
    return  res
  except TypeError:
    return l

答案 1 :(得分:0)

其他使用例外的选项:

mylist = [1, 8, [6, 4, 8, 9], 1, [4, 6, 9, 0], 5, 6]

def recusum(mylist, total = 0):
  for x in mylist:
    try: total = recusum(x, total)
    except: total += x
  return total

recusum(mylist) #=> 67