2012-09-05 8 views
3

변수의 중간 값을 파이썬에 저장하고 싶습니다. 이 변수는 루프에서 업데이트됩니다. list.append 명령을 사용하여이 작업을 수행하려고하면 목록의 모든 값이 새 변수 값으로 업데이트됩니다. 어떻게해야합니까?파이썬 목록 추가

while (step < maxstep): 
    for i in range(100):  
     x = a*b*c 
     f1 += x 
    f2.append(f1) 
    print f2 
    raw_input('<<') 
    step += 1 

예상 출력

[array([-2.03,-4.13])] 
<< 
[array([-2.03,-4.13]),array([-3.14,-5.34])] 

인쇄 출력

[array([-2.03,-4.13])] 
<< 
[array([-3.14,-5.34]),array([-3.14,-5.34])] 

내가 파이썬에서 원하는 것을 얻기의 다른 방법이 있나요?

+2

'조건'과 'm'의 의미는 무엇입니까? 'fi' 란 무엇입니까? 'f() '란 무엇입니까? –

+0

X는 함수를 기반으로 업데이트됩니다. m은 for 루프의 범위입니다. while 루프는 임의의 수의 단계에 대해 실행됩니다. – abcd

+0

하지만 이제는 혼란스러워서, 당신이'f1'과'fi'를 가지고 있음을 알았습니다. 그건 당신의 코드에서 오자입니까? – zenpoy

답변

7

원래 오타를했고 f1이 (또는 그 verca) actualy fi입니다 가정 (fi의 값이 변경입니까?) :

fi가에 대한 포인터입니다 객체이므로 fi += xfi이 가리키는 객체의 값을 실제로 변경하면 동일한 포인터를 계속 추가합니다. 희망이 분명하다.

문제를 해결하려면 fi = fi + x 대신 가능합니다.

+0

아 !, f1 + = x와 f1 = f1 + x 사이의 차이가 있다는 것을 깨닫지 못했습니다. :) – abcd

+0

다음 세대를위한 솔루션 추가 – zenpoy

1

당신이 목록에 같은 배열을 추가 한 다음

당신은 새로운 배열 당신이 f2

당신은거야에 추가 할 때마다 개체를 만드는 데 필요한 배열의 내용을 변경 나타납니다 도움이 더 필요하면 질문의 코드에 더 많은 정보를 추가해야합니다. 이 순간에 많은 이해가되지 않습니다

+0

내가 명확하게하기 위해 질문을 편집했습니다 – abcd

1

난 당신이 뭔가를 의미한다고 가정 f1가 변경 가능한 객체 인 경우, 라인 f1 += x이 새로운 객체를 생성하지 않습니다,하지만 f1의 값이 너무 모든 발생, 변경하는 것이

f2 = [] 
    f1 = 0 
    for i in range(100):  
     x = f() 
     f1 += x 
    f2.append(f1) 
    print f2 

f2 배열이 업데이트됩니다.

+0

네, 그게 무슨 뜻인가요, 고마워요! – abcd

0

실제 예제를 붙여야합니다.

추가하는 객체 (fi)는 변경할 수 있습니다 (see Python docs). 즉, 객체 값이 아니라 객체에 대한 참조를 추가한다는 의미입니다. 따라서 목록 인덱스 0과 1은 실제로 동일한 개체입니다.

루프 반복마다 새 개체 (fi = array())를 만들거나 copy module을 사용해야합니다.

0

또 다른 관련 질문은 "How do I pass a variable by reference?"입니다. Daren Thomas는 변수 패스가 파이썬에서 어떻게 작동하는지 설명하기 위해 과제를 사용했습니다. append 메소드의 경우, 우리는 비슷한 방식으로 생각할 수 있습니다."list_of_variables"의 1, 2 항목이 연결되어있어

list_of_variables[0] = list_of_values --> [1, 2, 3] 
list_of_values --> [1, 2, 3, 10] 
list_of_variables[1] = list_of_values --> [1, 2, 3, 10] 

:로

list_of_variables = [] 
list_of_values = [1, 2, 3] 
list_of_variables.append(list_of_values) 
print "List of variables after 1st appending: ", list_of_variables 
list_of_values.append(10) 
list_of_variables.append(list_of_values) 
print "List of variables after 2nd appending: ", list_of_variables 

첨부하는 작업이 생각 될 수있다, 당신은 "list_of_variables"목록에 목록 "LIST_OF_VALUES"를 추가한다고 가정 해 봅시다 메모리에서 동일한 객체에 상기의 출력은 : 한편

List of variabiles after 1st appending: [[1, 2, 3]] 
List of variables after 2nd appending: [[1, 2, 3, 10], [1, 2, 3, 10]] 

목록 "만일 _of_values ​​"는 변수이므로 동작이 달라집니다.

list_of_variables = [] 
variable = 3 
list_of_variables.append(variable) 
print "List of variabiles after 1st appending: ", list_of_variables 
variable = 10 
list_of_variables.append(variable) 
print "List of variables after 2nd appending: ", list_of_variables 

첨부 된 동작은 이제 등가이다

list_of_variables[0] = variable --> 3 
variable --> 4 
list_of_variables[1] = variable --> 4 

출력은 다음 변수 LIST_OF_VALUES 사이

List of variabiles after 1st appending: [3] 
List of variables after 2nd appending: [3, 10] 

차이는 제자리 나중에 한 변화이다.