我想在python中创建一个n x n
2D列表,其中所有元素都等于False
。所以我尝试了这个:
array = [[False] * n] * n
这似乎给了我想要的东西,但如果我想更改(i, j)
位置的元素,请说:
array[i][j] = not array[i][j]
这会改变j th 列中的所有元素,而不仅仅影响(i, j)
位置。我意识到这是因为列表中的所有行都只是引用第一行。
在vanilla python中没有非冗长的方法(没有numpy)来创建一个没有内部引用的列表的2D列表(是什么叫它)?
答案 0 :(得分:1)
您可以使用列表理解。
array = [[False for _ in range(n)] for _ in range(n)]
见这里:
>>> from pprint import pprint
>>> n = 10
>>> array = [[False for _ in range(n)] for _ in range(n)]
>>> pprint(array)
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
现在,如果你想在(i,j)改变一个元素,你可以只分配给它:
>>> array[2][4] = True
>>> pprint(array)
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, True, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]
[False, False, False, False, False, False, False, False, False, False]