Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中带递归的多维数组中的和数_Python_Python 3.x - Fatal编程技术网

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]],

我想在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]], 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))
时,我总是第一眼就认为您想要检查元组。不过,如果您愿意,请随时使用您的声明。没有真正的理由反对它;)