通过递归计算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))
我确定多维列表中存在问题。如何修复代码?
答案 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