我一直在爲udacity工作的代碼如下所示。我試圖弄清楚爲什麼當通過調用list(p)創建'g'時,列表'g'和'p'充當了同樣的列表。當在移動功能中調用print語句(print [i] [j])時,它顯示'g'改變時'p'被覆蓋。我剛開始用python編程,我會很感激任何幫助。提前致謝。兩個單獨的Python列表作爲一個
colors = [['red', 'green', 'green', 'red' , 'red'],
['red', 'red', 'green', 'red', 'red'],
['red', 'red', 'green', 'green', 'red'],
['red', 'red', 'red', 'red', 'red']]
measurements = ['green', 'green', 'green' ,'green', 'green']
motions = [[0,0],[0,1],[1,0],[1,0],[0,1]]
sensor_right = 0.7
p_move = 0.8
def show(p):
for i in range(len(p)):
print p[i]
total = len(colors[0])*len(colors)
for i in range(len(colors)):
p.append([])
for j in range(len(colors[i])):
p[i].append(1./total)
print p
def move(g,c,r):
t = list(g)
for i in range(len(g)):
for j in range(len(g[i])):
print p[i][j]
t[i][j] = t[(i-c)%len(g)][(j-r)%len(g[i])] * p_move
print p[i][j]
s = sum_table(t)
for i in range(len(g)):
for j in range(len(list(g[i]))):
t[i][j] /= s
return t
def sum_table(g):
sum = 0
for i in range(len(g)):
for j in range(len(g[i])):
sum += g[i][j]
print sum
return sum
move(list(p),0,1)
print p
爲什麼你認爲你需要做所有這些複製?編寫良好的Python代碼通常會避免故意複製。不要複製,然後改變它,編寫直接創建更改版本的代碼。 – 2012-04-02 01:22:13
P.S.通過'p_move'乘以所有東西的效果被標準化步驟取消,如果您剛開始使用標準化數據,則這是不必要的。另外,由於'p'在每個地方都以相同的「1./total」值開始,所以在「旋轉」數組後不會看到差異。 – 2012-04-02 01:33:28
我的代碼無法按預期工作,這更令人感到沮喪。我意識到我不需要像我這樣做複製,但我到了哪裏我無法弄清楚問題,我想知道爲什麼它是錯的。至於p_move,這是描述移動錯誤所必需的。標準化步驟將在我通過綠色或紅色傳感器讀數循環時改變陣列。該代碼尚未完成,並沒有旋轉陣列的一點,但隨着「運動」和「讀數」的發生,分佈將發生變化。我正在嘗試實現線性化。 – Jimmy 2012-04-02 03:51:38