Python - 使用递归返回遍历矩阵

Python - Returning a traversed matrix using recursion

假设我有一个这样的矩阵:

array = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

我想创建一个基本上循环遍历矩阵并打印出整数的方法,如下所示:

1,2,3,4,5,6,7,8,9

但是我想递归地做这个,这样我可以获得更多的经验。我目前有这个方法和一个助手:

def flatten_array(matrix):
 return str(helper(len(matrix), len(matrix[0]), 0, 0, matrix))


def helper(current_row, current_col, i, j, matrix):
    s = ''
    if i >= current_row:
        return 1
    elif j >= current_col:
        return helper(current_row, current_col, i + 1, 0, matrix)
    else:
        s += str(matrix[i][j]) + ','
        print(matrix[i][j], end=',')
        helper(current_row, current_col, i, j + 1, matrix)
        return s

它打印这个:

1,2,3,4,5,6,7,8,9,

但我实际上想要 return 这个而不是打印,有人可以帮忙吗?

我已将您的代码修改为 return 扁平化列表而不是打印。我传递了一个附加参数 ans,它是一个 list 来存储矩阵的值。

array = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

def flatten_array(matrix):
 return helper(len(matrix), len(matrix[0]), 0, 0, matrix, [])


def helper(current_row, current_col, i, j, matrix, ans):
    if i >= current_row:
        return 1
    elif j >= current_col:
        return helper(current_row, current_col, i + 1, 0, matrix, ans)
    else:
        ans.append(matrix[i][j])
        helper(current_row, current_col, i, j + 1, matrix, ans)
        return ans

print(flatten_array(array))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

你几乎肯定想要 itertools.chain.from_iterable(array) 这个

>>> import itertools
>>> array = [
...     [1, 2, 3],
...     [4, 5, 6],
...     [7, 8, 9]
... ]
>>> list(itertools.chain.from_iterable(array))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

请注意,如果您只是要遍历扁平化列表,您可以直接这样做并避免创建中间列表,因为 .from_iterable() returns 可迭代