更改嵌套列表中一个索引的值(Python)

时间:2017-06-13 04:01:42

标签: python nested-lists

我是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]]

2 个答案:

答案 0 :(得分:1)

通过执行row.append(column)grid.append(row),您可以将相同的行和列对象多次放入矩阵中。

相反,在循环内移动行和列的创建(例如,row = ...column = ...)行,以便在每次迭代时创建新值。

答案 1 :(得分:0)

执行row.append(column)时,您将相同的列表对象附加到行,因为列仅在全局创建了一次。因此,更改任何一列将更改所有列,因为它们是相同的列表对象。行也是如此

将行column = [0,0,0]row = []移到for循环中:

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)