2016-10-10 3 views
-1
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 

元の行列を返すDoctestは新しい行列を返しますが、元の行を編集せずにこの行列を複製する方法はわかりません。行列の問題をクローニングする

+0

ディープコピーを使用する必要があります –

答えて

1

外側のリストのコピーを作成していますが、内側のリストはすべて同じです。あなたは代わりにそれを修正するのrowに別のリストを使用する必要があります。

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

その要約版れる:

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

行列はリストのリストとして表現されているため、問題が発生します。文new_matrix = matrix[:]は「外側」リストのコピーを作成しますが、各行のコピーは作成しません。実装は、浅いコピーとも呼ばれます。詳細については、this postを参照してください。

add_columnメソッドは、zondoの提案に従って実装するか、copyモジュールを使用してディープコピーを作成するか、またはnumpyを使用します。 numpyを使用すると、新しいライブラリを知る必要がありますが、柔軟性と計算効率は長期的には価値があります。

関連する問題