2016-11-22 1 views
0

같은 목록을 다른 목록에 두 번 이상 추가 한 다음 둘 중 하나만 수정해야합니다. 나는 동일한 목록을 다른 목록에 추가하기

list_a = [] 
list_b = [0,0,0] 
for x in range(3): 
    list_a.append(list_b) 

을 시도하지만 문제는 내가

list_a[0][0] = 1 

를하려고하면 그것은 또한 list_a[1][0]list_a[2][0]을 수정하는 것입니다. 어떻게 피할 수 있습니까?

+2

'list_a.append처럼 (list_b의 [:]) '-의 사본을 추가' list_b' 대신 원래 – khelwood

+0

정말 고마워요! @khelwood –

+0

"같은 목록을 다른 목록에 한 번 이상 추가해야합니다."- 이제 동일한 목록이 다른 목록에 여러 번 추가되는 문제가 있습니다. 동일한 목록을 다시 사용하는 대신 여러 목록을 만들어야합니다. – user2357112

답변

0

사용하여 다음

list_a = [] 
list_b = [0,0,0] 
for x in range(3): 
    list_a.append(list_b[:]) 
1
당신이 원하는 모든 모든 0의 빈 목록을 만드는 경우이 같은 목록을 만들 수

더 나은 방법은 다음과 같습니다

my_list = [[0]*3 for _ in range(3)] 

은의이 결과 여부를 확인하자 같은 문제가 있거나 그렇지 않은 경우 :

>>> my_list 
[[0, 0, 0], [0, 0, 0], [0, 0, 0]] 
>>> my_list[0][0] = 1 
>>> my_list 
[[1, 0, 0], [0, 0, 0], [0, 0, 0]] 
#^  ^  ^
# Yipee! value changed only once 

코드가 왜 우연하지 않은지 아는 경우 rking, check : Python list of lists, changes reflected across sublists unexpectedly

0

list_b을 세 번 추가하므로 수정중인 것은 실제 list_b 객체입니다. 당신이 원하는 것은 얕은 복사본을 만드는 것입니다, 이것은이

list_a.append(list(list_b)) 

같이 할 수 또는이

list_a.append(list_b[:]) 
관련 문제