2016-10-10 2 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을 참조하십시오.

zondo의 제안에 따라 add_column 메서드를 구현하거나 copy 모듈을 사용하여 전체 복사본을 만들거나 numpy을 사용할 수 있습니다. numpy을 사용하면 새로운 라이브러리에 대해 알아야하지만, 유연성과 계산 효율성은 장기적으로 볼 때 가치가 있습니다.

관련 문제