如何在python中创建所有元素相同的2D列表?

时间:2015-12-13 14:34:20

标签: python list

我想在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列表(是什么叫它)?

1 个答案:

答案 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]