Python 二维列表中的元素重复,同时更改一个值?
下面是python代码,我使用操作符*初始化了一个二维列表,并使用其他值设置对角线元素。但是得到意外的输出Python 二维列表中的元素重复,同时更改一个值?,python,arrays,python-3.x,list,Python,Arrays,Python 3.x,List,下面是python代码,我使用操作符*初始化了一个二维列表,并使用其他值设置对角线元素。但是得到意外的输出 table = [([False]*5)]*5 for i in range(5): table[i][i] = 1 预期产量为 [[True, False, False, False, False], [False, True, False, False, False], [False, False, True, False, False], [False, False,
table = [([False]*5)]*5
for i in range(5):
table[i][i] = 1
预期产量为
[[True, False, False, False, False],
[False, True, False, False, False],
[False, False, True, False, False],
[False, False, False, True, False],
[False, False, False, False, True]]
但是我有
[[True, True, True, True, True],
[True, True, True, True, True],
[True, True, True, True, True],
[True, True, True, True, True],
[True, True, True, True, True]]
我想列表中的元素可能指的是一个。如何在不使用numpy或其他包的情况下获得预期的输出?通过嵌套的
for
循环在表
构造中明确,否则列表中的指针将全部指向单个列表。这就是为什么在代码中,分配一个元素会影响所有元素
table = [[False for i in range(5)] for j in range(5)]
for i in range(5):
table[i][i] = True
# [[True, False, False, False, False],
# [False, True, False, False, False],
# [False, False, True, False, False],
# [False, False, False, True, False],
# [False, False, False, False, True]]
如果您愿意使用第三方库,最好使用
numpy
:
import numpy as np
table = np.eye(5).astype(bool)
# array([[ True, False, False, False, False],
# [False, True, False, False, False],
# [False, False, True, False, False],
# [False, False, False, True, False],
# [False, False, False, False, True]], dtype=bool)
通过嵌套的
for
循环,在表
构造中要明确,否则列表中的指针将全部指向单个列表。这就是为什么在代码中,分配一个元素会影响所有元素
table = [[False for i in range(5)] for j in range(5)]
for i in range(5):
table[i][i] = True
# [[True, False, False, False, False],
# [False, True, False, False, False],
# [False, False, True, False, False],
# [False, False, False, True, False],
# [False, False, False, False, True]]
如果您愿意使用第三方库,最好使用
numpy
:
import numpy as np
table = np.eye(5).astype(bool)
# array([[ True, False, False, False, False],
# [False, True, False, False, False],
# [False, False, True, False, False],
# [False, False, False, True, False],
# [False, False, False, False, True]], dtype=bool)