2012-09-05 82 views
3

我想在Python中存儲變量的中間值。該變量在循環中更新。當我嘗試使用list.append命令執行此操作時,它會使用變量的新值更新列表中的每個值。我應該怎麼做?Python 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

'condition'和'm'是什麼意思?什麼是'fi'?什麼是'f()'? – 2012-09-05 10:42:55

+0

X根據函數進行更新, m是for循環的範圍, while循環運行任意數量的步驟 – abcd

+0

但現在我很困惑,我看到你有'f1'和'fi'你的代碼中有一個錯字嗎? – zenpoy

回答

7

假設原來有一個錯字和f1是actualy fi(或副verca)(其中是fi值改變了嗎?):

fi是一個指向一個對象,所以你繼續追加相同的指針,當你實際上改變了對象的值到fi點。希望這是明確的。

要解決此問題,您可以改爲fi = fi + x

+0

啊!,我沒有意識到有這樣的區別 f1 + = x和f1 = f1 + x 它解決了這個問題:) – abcd

+0

爲下一代添加了您的解決方案 – zenpoy

1

看來要附加同一陣列的列表,然後改變陣列

您需要創建一個新的數組每次追加到f2

你將時間對象的內容如果您需要更多幫助,則需要在您的問題中向代碼添加更多信息。它不會在此刻多大意義

+0

我編輯的問題,使其更清晰 – abcd

1

我想你的意思是這樣的:

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

注意,如果f1是一個可變對象,行f1 += x不創建新的對象,而只是改變了f1價值,因此其所有出現在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使用賦值來解釋變量傳遞如何在Python中工作。對於追加方法,我們可以用類似的方式來思考。假設你要追加列表「list_of_values」到列表「list_of_variables」,

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[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 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 variabiles after 1st appending: [3] 
List of variables after 2nd appending: [3, 10] 

變量和list_of_values之間的差異是在就地後一個變化。