Python 不规则矩阵上的递归可以';找不到结果

Python 不规则矩阵上的递归可以';找不到结果,python,recursion,Python,Recursion,我想练习一下递归,并认为在不规则矩阵中搜索会很有趣。我有一个简单的递归,它可以工作,但却不能完成整个数组。它找不到8-11号。它需要返回匹配位置的坐标,以便我以后可以使用它。我遗漏了什么吗 数组=[ [1, 2, [3, 4, [5, [6, [7, 0]]]], [8, 9], 10, 11] ] def searchArray(数组,已搜索,坐标=[]): 对于i,枚举(数组)中的维度: 如果类型(尺寸)==int: 如果维度==已搜索: 返回坐标+[i,] 其他: 坐标。附加(i) 返回

我想练习一下递归,并认为在不规则矩阵中搜索会很有趣。我有一个简单的递归,它可以工作,但却不能完成整个数组。它找不到8-11号。它需要返回匹配位置的坐标,以便我以后可以使用它。我遗漏了什么吗


数组=[
[1, 2, [3, 4, [5, [6, [7, 0]]]], [8, 9], 10, 11]
]
def searchArray(数组,已搜索,坐标=[]):
对于i,枚举(数组)中的维度:
如果类型(尺寸)==int:
如果维度==已搜索:
返回坐标+[i,]
其他:
坐标。附加(i)
返回searchArray(维度,搜索,坐标=坐标)
搜索=5
坐标=搜索数组(数组,已搜索)
打印(坐标)

问题在于,只要对嵌套列表进行递归调用,不管是否找到了
已搜索的
,都会从函数返回。因此,for的
循环永远不会继续查找列表的其余部分

在返回之前,需要检查递归是否成功

另外,您不应该使用
append()
就地修改
坐标。无论是否成功,最终都会返回一个包含所有坐标的列表。在递归中传递一个新列表作为参数

def searchArray(array, searched, coordinates=[]):
    for i, dimension in enumerate(array):
        if type(dimension) == int:
            if dimension == searched:
                return coordinates+[i,]
        else:
            found = searchArray(dimension, searched, coordinates=coordinates + [i])
            if found:
                return found
    return None # Not found

顺便说一句,将
np.array
与“不规则矩阵”一起使用是没有意义的。你想做什么?你似乎在试图找到“搜索”的维度?在你提供的例子中,第五维?@Meredith是的,我需要坐标。我更新了这个问题,并接受了下面的答案