Python中带递归的多维数组中的和数
我想在Python中使用递归对多维数组中的数字求和:Python中带递归的多维数组中的和数,python,python-3.x,Python,Python 3.x,我想在Python中使用递归对多维数组中的数字求和: tab = [7, 5, [3, 6, [2]], 7, [1, [2, 3, [4]], 9, 2], 4] 我尝试过几件事,例如: sum(map(sum, tab)) 它适用于简单的数组,例如[[1,2],[3,4]],但不适用于上面的数组。我得到这个错误: TypeError:“int”对象不可编辑 有什么想法吗?您可以使用以下递归算法: tab = [7, 5, [3, 6, [2]], 7, [1, [2, 3, [4]],
tab = [7, 5, [3, 6, [2]], 7, [1, [2, 3, [4]], 9, 2], 4]
我尝试过几件事,例如:
sum(map(sum, tab))
它适用于简单的数组,例如[[1,2],[3,4]]
,但不适用于上面的数组。我得到这个错误:
TypeError:“int”对象不可编辑
有什么想法吗?您可以使用以下递归算法:
tab = [7, 5, [3, 6, [2]], 7, [1, [2, 3, [4]], 9, 2], 4]
def sumLst(l):
sum = 0
for ele in l:
if type(ele) in [float, int]:
sum += ele
else:
sum += sumLst(ele)
return sum
print(sumLst(tab))
您可以使用以下递归算法:
tab = [7, 5, [3, 6, [2]], 7, [1, [2, 3, [4]], 9, 2], 4]
def sumLst(l):
sum = 0
for ele in l:
if type(ele) in [float, int]:
sum += ele
else:
sum += sumLst(ele)
return sum
print(sumLst(tab))
一种方法是:
tab = [7, 5, [3, 6, [2]], 7, [1, [2, 3, [4]], 9, 2], 4]
def r_sum(tab):
return sum(r_sum(item) if isinstance(item, list) else item for item in tab)
r_sum(tab)
# 55
一种方法是:
tab = [7, 5, [3, 6, [2]], 7, [1, [2, 3, [4]], 9, 2], 4]
def r_sum(tab):
return sum(r_sum(item) if isinstance(item, list) else item for item in tab)
r_sum(tab)
# 55
我认为
如果isinstance(ele,(float,int))
在这里更整洁。另外,我认为您只需要检查ele
是否是一个列表,如果是,您就可以递归。@RoadRunner我个人认为在[float,int]
中键入(ele)更具可读性,因为使用isinstance(ele,(float,int))
时,我总是第一眼就认为您想要检查元组。不过,如果您愿意,请随时使用您的声明。没有真正的理由反对它;)我认为如果isinstance(ele,(float,int))
在这里更整洁。另外,我认为您只需要检查ele
是否是一个列表,如果是,您就可以递归。@RoadRunner我个人认为在[float,int]
中键入(ele)更具可读性,因为使用isinstance(ele,(float,int))
时,我总是第一眼就认为您想要检查元组。不过,如果您愿意,请随时使用您的声明。没有真正的理由反对它;)