2017-06-13 51 views
0

我是Python新手(和編碼),並且認爲我對結構有合理的把握,但是我一直堅持這一點。我想更改嵌套列表的第一個值,然後更新列表中下一個位置的值(例如,創建網格座標作爲嵌套列表)。在嵌套列表(Python)中更改一個索引的值

p_d = 3 

passes = 1 
grid = [] 
row = [] 
column = [0, 0, 0] 

while passes <= p_d: 
    row.append(column) 
    grid.append(row) 
    passes += 1 

for i in range(len(row)): 
    column[i] = -(p_d - 1)/2 + i 

print(row) 

結果是這樣的:

[[-1.0, 0.0, 1.0], [-1.0, 0.0, 1.0], [-1.0, 0.0, 1.0]] 

但我真正需要的應該是這樣的:

[[-1.0, 0, 0], [0.0, 0, 0], [1.0, 0, 0]] 
+0

不,它不應該。您已將相同列表「列」附加到外部列表「行」三次。所以你應該期望看到相同的列表三次... –

回答

0

當您執行row.append(column)時,您正在將同一個列表對象附加到行上,因爲列已全局創建一次。因此,更改任何一列將更改所有列,因爲它們是相同的列表對象。這同樣適用於行

移動的for循環裏面的線column = [0,0,0]row = []

p_d = 3 

passes = 1 
grid = [] 

while passes <= p_d: 
    row = [] 
    column = [0, 0, 0] 
    row.append(column) 
    grid.append(row) 
    passes += 1 


for i in range(len(grid)): 
    grid[i][0][0] = -(p_d - 1)/2 + i 

print(grid) 
+0

你還需要在循環內移動'row = []',否則你將遇到同樣的問題。 – BrenBarn

+0

非常感謝,節省了我很多時間把我的頭撞在牆上! – broncosaurus

1

這樣做row.append(column)grid.append(row),你是把同一行將列對象多次放入您的矩陣中。

而是在循環內移動行和列的創建(例如,row = ...column = ...)行,以便在每次迭代中創建新值。