def create_octahedron(size):
l = [0]
y = []
z = []
if size % 2 == 0 or size <= 1:
return x
for i in range(size - 1):
l += [0]
x = l[:]
for i in range(size):
y += [x[:]]
for i in range(size):
z += [y[:]]
for i in range(size):
for u in range(size):
for v in range(size):
if i == len(z)//2:
if u == len(y)//2:
if v == len(x)//2:
z[i][u][v] = 1
print(z)
我发布了一个与此类似的问题,现在我试图找出为什么仍然有 1 的重复实例。 [[[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0 , 0, 0, 0, 0, 0, 0]], [[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0 , 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0 , 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]], [[0, 0, 0, 0, 0, 0, 0], [0, 0 , 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0], [0, 0, 0 , 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]], [[0, 0, 0 , 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1 , 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0 , 0, 0]], [[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0 , 0, 0], [0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0 , 0], [0, 0, 0, 0, 0, 0, 0]], [[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0 , 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]], [[0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]] 这是我的输出。应该是 1 而不是 7。我知道问题出在哪里,我知道问题是什么,只是不知道为什么会这样或如何从这里解决它。我什至不关心修复它,因为我知道为什么我尝试的方法不起作用。
最佳答案
您遇到的问题是由于列表的构 build 成的。由于您通过将列表添加到其他列表来创建列表,因此在多种情况下,单个列表会指向列表的另一部分。因此,当您编辑列表的一部分时,它会更改指向它的其他部分。
我能够通过复制您的代码并手动更改 z[1][1][1] 来解决这个问题。当我更改列表中的此位置时,它更改了整个列表。
解决方案:
我建议使用上述评论者代码或停止重复添加列表到列表。
关于python身份危机为什么l或x复制0而不产生新的0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53568768/