2015-07-05 23 views
1
a=[3,4] 
b=[5,8] 
c=[7,4] 
d=[a,b,c] 
print (d) 
for i in range(3): 
    for j in range(2): 


     d[i][j]-=a[j] 


print (d) 

在此Python代碼的輸出是無法在python中移位原點..?

[[0,0], [5,8], [7,4]] 

,而不是

[[0,0], [2,4], [4,0]] 

誰能告訴我爲什麼?

+0

爲什麼期望'[[0,0],[2,4],[4,0]]'? – Kasramvd

+1

提示:外循環的第一次迭代後,「a」的內容是什麼? (添加一個'print'語句來查看。) –

+0

@ManishKumarSingh請接受一個答案 –

回答

6

d包含a的引用,而不是副本。

a在循環的第一次迭代期間從[3,4]變爲[0,0]。這就是爲什麼,循環的下一個迭代將執行d[i][j]-=[0,0]

你應該d = [list(a), b, c]

+0

所以有什麼方法可以通過它,而不是重寫一個循環之後我在for循環 –

+0

@ManishKumarSingh你只需要替換'd = [a, b,c]'by'd = [list(a),list(b),list(c)]'並且問題將被解決,因爲'a'不會再改變。 – clemtoy

+0

'd = map(list,[a,b,c])'也會有點整齊 – yuvi

0

更換d=[a,b,c]我希望你有你的代碼中的邏輯錯誤。

如果你想輸出爲:[[0,0],[2,4],[4,0]],變線4
d = [list(a), b, c]或更好的表達是d = [list(a), list(b), list(c)]