假设我有一个这样的矩阵:
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()
返回一个可迭代对象