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

如何在python中创建所有元素都相同的2D列表?,python,list,Python,List,我想在python中创建一个nxn2D列表,其中所有元素都等于False。所以我试了一下: array = [[False] * n] * n 这似乎给了我想要的,但如果我想更改(I,j)位置中的元素,请说: array[i][j] = not array[i][j] 这将更改第j列中的所有元素,而不仅仅影响(i,j)位置。我意识到这是因为列表中的所有行都只是引用了第一行 在vanilla python中,是否有一种非详细的方法(无numpy)来创建一个没有内部引用的2D列表(这就是它的名称

我想在python中创建一个
nxn
2D列表,其中所有元素都等于
False
。所以我试了一下:

array = [[False] * n] * n
这似乎给了我想要的,但如果我想更改
(I,j)
位置中的元素,请说:

array[i][j] = not array[i][j]
这将更改第j列中的所有元素,而不仅仅影响
(i,j)
位置。我意识到这是因为列表中的所有行都只是引用了第一行


在vanilla python中,是否有一种非详细的方法(无numpy)来创建一个没有内部引用的2D列表(这就是它的名称)?

您可以使用列表理解

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]

如果使用匿名变量而不是x,则会更具python风格,因此
array=[[False for uu-in-range(n)]for u-in-range(n)]
因为在表达式中不使用
x
。此外,如果您尝试迭代数组的值(确实如此),则可以对数组中的行使用
:打印行
,而不是任何索引(更干净、更简单);或者更具python风格-从pprint导入pprint和pprint整个数组:
从pprint导入pprint;pprint(数组)
从未听说过
pprint
。谢谢@lejlot!匿名变量看起来不错。更不用说
pprint
和列表理解了!谢谢你的提示。