본문 바로가기

컴퓨터 프로그래밍

리스트와 numpy 문제 => 해결

반응형

이전 포스팅에서 리스트에 대해서 문제가 발생했었다. 

문제가 되는 리스트 선언 부분을 확인해보자.

선언 방식을 보면 행과 열 사이에 *로 표시되었다. 

해당 방식을 사용하면 객체의 복사가 아니라 레퍼런스의 복사가 일어나서 하나의 값을 수정하면 다른 행의 값도 바뀌게 된다. 

무슨말인지 모르겟다면 다음의 예시를 보면 될 것 같다.!

TEST = [ [0] * 4] * 3

print(TEST) 

결과: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

여기서 TEST[0][0]에 임의의수를 대입하면 어떻게 될까?

TEST[0][0] = 
print(TEST)

결과: [[3, 0, 0, 0], [3, 0, 0, 0], [3, 0, 0, 0]]

보다싶이 값이 동일한 부분에 다 들어가는 문제가 생긴다. (의도치 않는 문제 발생)

 

라서 선언을 위처럼 하면 안되고 다음과 같이 해야된다. 

방법1: TEST = [ [0] *4 for x in range(3)]

 

방법2: TEST = []

for x in range(3):

    TEST.append( [0] * 4 )

방법3: TEST = [[0 for col in range(3)] for row in range(4)]

 

이런 부분 때문에 시간 낭비한게 너무 분하다....

 

반응형