"컴퓨터 과학자처럼 생각하는 법 : Python 2nd Edition 문서 학습"을 읽었습니다. Chapter 9 끝 부분에이 연습 11이 있으며, doctest 패스를 만들기 위해 파이썬 코드를 작성하도록 요청합니다.파이썬에서 중첩 목록을 복제하는 방법은 무엇입니까?
내 초기 솔루션 :
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]]
"""
result = matrix[:]
for index in range(len(matrix)):
result[index] += [0]
return result
if __name__ == "__main__":
import doctest
doctest.testmod()
그러나이 코드는 두 번째 시험을 통과하지 않았다. 지금
result[index] = result[index] + [0]
하고 코드 모든 테스트를 통과 : 나는 다음 for 루프 의 몸을 바 꾸었습니다. 하지만 코드에서 이러한 변화가 어떻게 문제를 해결했는지 이해할 수 없습니다. 내가 result[index] = result[index] + [0]
은 result[0] += [0]
의 명시적인 형태라고 생각했는데, 왜 그런 행동이 다른가요?
솔루션에서 제공하는 코드에 대한 내 대답을 비교 한 결과, 목록 복제 방법에 문제가있는 것 같습니다. 솔루션에서 다음과 같이 처리했습니다 : result = [d[:] for d in matrix]
,이 경우 루프의 내 초기 루프가 작동합니다. 하지만 result = matrix[:]
이 (가) 작동하지 않는 이유는 무엇입니까? 새 객체가 아닌 별칭을 만드나요?
또한 누군가가 [d[:] for d in matrix]
이 구문 분석되는 방법을 설명 할 수 있습니까? 이전에 루프에 을 사용하는 방법을 본 적이 없으며 수업에서 설명/시연되지 않았습니다.