无法克隆矩阵

时间:2016-10-10 21:29:34

标签: python matrix cloning

    def add_column(matrix):
"""
  >>> m = [[0, 0], [0, 0]]
  >>> add_column(m)
  [[0, 0, 0], [0, 0, 0]]
  >>> n = [[3, 2], [5, 1], [4, 7]]
  >>> add_column(n)
  [[3, 2, 0], [5, 1, 0], [4, 7, 0]]
  >>> n
  [[3, 2], [5, 1], [4, 7]]
"""
new_matrix = matrix[:]
for row in new_matrix:
    row += [0]
return new_matrix

返回原始矩阵的Doctests将返回新矩阵,我不知道如何在不编辑原始矩阵的情况下克隆该矩阵。

2 个答案:

答案 0 :(得分:1)

您正在制作外部列表的副本,但每个内部列表仍然相同。您需要为row使用不同的列表,而不是修改它:

new_matrix = []
for row in matrix:
    new_matrix.append(row + [0])

简明版是:

new_matrix = [row + [0] for row in matrix]

答案 1 :(得分:1)

问题出现是因为矩阵表示为列表列表。声明new_matrix = matrix[:]复制了“外部”列表,但没有复制每一行。您的实现也称为浅拷贝。有关更详细的说明,请参阅this post

您可以按照zondo的建议实施add_column方法,使用copy模块创建深层副本,或使用numpy。虽然使用numpy要求您了解新的库,但从长远来看,灵活性和计算效率是值得的。