2013-06-07 1 views
0

model = [[[[0,0,0,0],...[0,0,0,0]]...[[0,0,0,0],...[0,0,0,0]]]...[[[0,0,0,0],...[0,0,0,0]]...[[0,0,0,0],...[0,0,0,0]]]]과 같은리스트 인 model = [[[[0,0,0,0]]*4]*15]*5으로 작성된 파이썬리스트가 있습니다. 문제는 내가중첩 된 파이썬리스트에 값을 자동으로 설정합니다.

def setLED(model,boardid,chipid,tankid,ledid,value): model[boardid][chipid][tankid][ledid]=value

4 제로의 모든 목록을 사용하여 다른 값으로 제로 중 하나를 설정하려고 할 때 동일하게 설정됩니다 있다는 것입니다. 즉, setLED (model, 0,0,0,0,255)를 사용하려고하면 모든 4 개의 0 목록의 첫 번째 값은 255가됩니다. 의도 한 결과는 4 개의 0으로 이루어진 첫 번째 목록 (즉, model [0 ] [0] [0] [0])가 변경됩니다. 나는 파일을 첨부하는 방법이 있다고 생각하지 않지만 누구든지 그것을 필요로한다면 나는 목록의 전체 내용을 게시 할 수있다.

왜 이런 일이 일어 났는지 알아낼 수있는 사람에게 미리 감사드립니다.

[[0]]*n 

같은 배열에 n 개의 참조를 보유하는 배열을 생성하는 :

편집 :이 같은 배열의 배열을 만들 때이 Nested List Indices

답변

3

의 중복입니다. 다른 방법으로 새 ​​배열을 추가해야합니다. 이렇게하는 한 가지 방법은, 지능형리스트를 사용하는 것 즉

새로운 배열 대신 재사용 참조를 생성하지
[[[ [0,0,0,0] for _ in range(4)] for _ in range(15)] for _ in range(5)] 

.

+0

타이핑하지 않고 그러한 구조를 만드는 가장 좋은 방법에 대한 권장 사항은 무엇입니까? 나는 numpy가 최고의 선택일지도 모른다라고 생각한다. 그러나 나는 그것을 아직 이해하지 않고 있었다. – user2461671