這是因爲你在傳遞這個功能列表中有1
作爲第一要素的價值。例如:
out([1,2,3,4]) # ==> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
要通過代碼一步一步:
test_list = [1,2,3,4]
result = []
for i in some_list: # The value of each element in some_list
if i == 1: # If the value is "1" set test_list: [0,0,0,0]
test_list = [0,0,0,0]
else:
test_list = test_list # Otherwise set test_list to itself (doing nothing)
result.append(test_list)
for i in some_list:
的爲i
循環值是你在some_list
元素的值,它是不是索引或元素,我們在列表中的位置(因爲它出現這個問題,打算)
if i == 1:
test_list = [0,0,0,0]
如果該值爲1
,那麼test_list
將被設置爲[0,0,0,0]
。一旦這個命中,只有值[0,0,0,0]
將被追加到result
。因此,如果第一個元素是1
,那麼你只能看到結果的價值[0,0,0,0]
,否則你會看到[1,2,3,4]
,直到循環命中其中列表中some_list
值1
。
下面是一些例子:
out([0,1,2,3]) # [[1, 2, 3, 4], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
out([1,2,3,4]) # [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
out([2,2,5,1]) # [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [0, 0, 0, 0]]
希望這使得它更清楚爲什麼你得到這一結果。
編輯
在更新的問題方面發生了什麼這裏要說的是,當你調用.append(fig)
簡直是在內存中的參考fig
的副本。基本上每當它改變你所附加的所有副本也會改變。還有,你可以處理這個問題有兩種方式,第一種是有自己的變量fig
在循環的範圍界定,這樣一來它是在每個循環一個新的和不同的變量:
for i in test_list:
fig = [2, 1] # <== In the scope of the loop, so each fig is it's on variable
...
第二種方式是你可以追加fig[:]
,這意味着它將數組fig
複製爲一個新的數組,並傳遞在append
:
for i in test_list:
if i == '0':
fig[0] = off
fig[1] = off
elif i == '1':
fig[0] = off
fig[1] = on
new_list.append(fig[:]) # <== Copy the array fig and append that value
是什麼'test_list = test_list'是什麼意思?你爲什麼做這個?它不會爲代碼添加任何內容。 – Antimony
當我運行這個代碼時,它不返回'[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0 ,0]]'。我改用'[[1,2,3,4],[0,0,0,0],[0,0,0,0],[0,0,0,0]]'代替。請確保你的問題是正確的。 – Antimony
'some_list'的價值是什麼?如果第一個元素是值「1」,那麼是的,它將是[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0, 0,0,0]]'。你不檢查你是否在第一個索引上,你正在檢查'some_list'中的值是否是'1'。 –