[PYTHON] 한 목록의 요소를 변경하면 여러 목록이 변경됩니다. [중복]
PYTHON한 목록의 요소를 변경하면 여러 목록이 변경됩니다. [중복]
목록 목록에 mysolution이라고 써 있습니다.
>>>mySolution
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> mySolution[0][0] = 1
>>> mySolution
[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
의도 된 결과 :
[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
목록의 제 목록에있는 모든 요소가 1로 변경되는 이유는 무엇입니까? 첫 번째 목록의 첫 번째 요소를 1로 변경하고 싶습니다.
해결법
-
==============================
1.중요한 것은 원래의 mysolution 목록을 만든 방법입니다. 보이는 것처럼 4 번 같은 목록이 포함되어 있으므로 한 번 변경하면 4 가지 위치 모두에서 변경됩니다.
중요한 것은 원래의 mysolution 목록을 만든 방법입니다. 보이는 것처럼 4 번 같은 목록이 포함되어 있으므로 한 번 변경하면 4 가지 위치 모두에서 변경됩니다.
이와 같이 독립적 인 0으로 채워진 목록을 초기화하려면 다음을 수행 할 수 있습니다.
mysolution = [[0] * 4 for i in range(4)]
-
==============================
2.다음과 같이 목록을 작성했을 가능성이 큽니다.
다음과 같이 목록을 작성했을 가능성이 큽니다.
mySolution = [0]*4 mySolution = [mySolution]*4
또는 동등하게 :
mySolution = [[0]*4]*4
위의 스 니펫 중 하나는 동일한 하위 목록의 사본 인 4 개의 하위 목록으로 된 목록을 작성하므로 하나의 하위 목록에 대한 수정 사항은 다른 하위 목록에 반영됩니다. 둘은 동일하고 동일합니다. 해결책은 네 가지 하위 목록을 만드는 것입니다.
mySolution = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
또는 조금 더 짧습니다.
mySolution = [[0]*4 for _ in xrange(4)]
-
==============================
3.모든 포함 된 목록은 실제로 동일한 목록이므로 할 일 :
모든 포함 된 목록은 실제로 동일한 목록이므로 할 일 :
l = [0, 0, 0, 0] my_solution = [l, l, l]
그런 다음 my_solution [0], my_solution [1] 및 my_solution [2]는 동일한 객체 (l)에 대한 참조입니다.
한 위치에서 목록을 수정하면 모든 위치가 변경됩니다. 왜냐하면 목록은 변경 가능한 객체이기 때문입니다.
대신 여러 목록을 사용하십시오.
l1 = [0, 0, 0, 0] l2 = [0, 0, 0, 0] l3 = [0, 0, 0, 0] my_solution = [l1, l2, l3]
어떤 의도로 작동합니다.
-
==============================
4.이 일이 잘되고 있음에 유의하십시오.
이 일이 잘되고 있음에 유의하십시오.
mySolution = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] mySolution[0][0] = 1 print mySolution >>> [[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
그것은 모두 솔루션을 어떻게 초기화 했느냐에 달려 있습니다. 이
mySolution = [[0, 0, 0, 0]]*4 mySolution[0][0] = 1 print mySolution
주는
>>> [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]] >>>
왜냐하면 mySolution의 각 배열 [0, 0, 0, 0]은 [[0, 0, 0, 0]] * 4의 초기화 배열 [0, 0, 0, 0]의 복사본이기 때문입니다. 첫 번째 배열의 첫 번째 요소를 변경하면 해당 배열의 복사본도 변경됩니다.
이 초기화 mySolution = [범위 (4)의 x에 대한 [0, 0, 0, 0]] 당신은 배열을 복사하지 않고 [0,0,0,0]을 4 번 더하여 예상 한 결과를 제공합니다 .
from https://stackoverflow.com/questions/18946728/changing-an-element-in-one-list-changes-multiple-lists by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 플라스크에 업로드 저장은 프로젝트 루트에만 저장됩니다. (0) | 2018.10.05 |
---|---|
[PYTHON] 파이썬 time.sleep (0) | 2018.10.05 |
[PYTHON] regex href 속성에서 HTML에서 파이썬으로 URL을 추출하는 [duplicate] (0) | 2018.10.05 |
[PYTHON] Flask-Login은 TypeError를 발생시킵니다 : is_active 속성을 덮어 쓰려고 할 때 'bool'객체를 호출 할 수 없습니다. (0) | 2018.10.05 |
[PYTHON] 값 사이에 공백없이 변수를 인쇄하는 법 [duplicate] (0) | 2018.10.05 |