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



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

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扁平列表而不是打印。我已经传递了一个额外的参数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()返回一个可迭代对象

最新更新