python - 将值设置到另一个列表(a)中的列表(b)中的一个位置,将该值设置在列表(a)中的所有列表中的相同位置
问题描述
我试图使用嵌套列表创建一个 9x9 数组,当我设置时试图设置一个值,出于某种原因,它会在该数组的每一行中设置该值。它以这样的列表开头
[[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]]
我做了类似 list[2][3]=1 的事情,列表更改为
[[0,0,0,1,0],
[0,0,0,1,0],
[0,0,0,1,0],
[0,0,0,1,0],
[0,0,0,1,0]]
我不知道我做错了什么。我的代码是
def resetGrids():
gridHidden=[]
gridShown=[]
gridpart=[]
for i in range(9):
gridpart.append(0)
for i in range(9):
gridHidden.append(gridpart)
gridShown.append(gridpart)
for i in range(10):
searching=True
while searching:
checkX=random.randint(0,8)
checkY=random.randint(0,8)
print(checkX, checkY)
if gridHidden[checkY][checkX]!=10:
print(gridHidden[checkY][checkX])
gridHidden[checkY][checkX]=10
print("a")
#for a in range(-1,2):
# if checkY+a>=0 and checkY+a<=8:
# for b in range(-1,2):
# if checkX+b>=0 and checkX+b<=8:
# if gridHidden[checkY+a][checkX+b]!=10:
# gridHidden[checkY+a][checkX+b]+=1
searching=False
print("B")
print(gridHidden)
print("c")
print("d")
解决方案
尝试设置为copy()
实际列表的内部列表,我猜这是因为您实际上传递了对列表的引用。替换为以下行:
gridHidden.append(gridpart.copy())
gridShown.append(gridpart.copy())
当我尝试这个时,并添加了这部分:
print(gridHidden)
gridHidden[1][2] = 3
print(gridHidden)
我懂了:
[[0, 10, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 10, 0, 0, 10, 10, 0, 0, 10], [0, 0, 0, 0, 0, 0, 0, 10, 0], [0, 0, 0, 10, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 10, 0, 0, 0], [0, 0, 0, 0, 10, 0, 0, 0, 0], [0, 10, 0, 0, 0, 0, 0, 0, 0]]
[[0, 10, 0, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 10, 0, 0, 10, 10, 0, 0, 10], [0, 0, 0, 0, 0, 0, 0, 10, 0], [0, 0, 0, 10, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 10, 0, 0, 0], [0, 0, 0, 0, 10, 0, 0, 0, 0], [0, 10, 0, 0, 0, 0, 0, 0, 0]]
推荐阅读
- java - 不能将 null 设置为唯一列
- python - 测试一手 5 张牌的同花
- visual-studio - 如果没有项目参考,Visual Studio Build 不会下载所有 NuGet 包
- php - 通过 Google Cloud Storage 中的 PHP 服务器提供文件的最有效方式?
- r - 字符串拆分以删除_之后的所有内容
- c# - 如何将 DateTime 舍入但 23 次?
- c++ - wxGLCanvas 调整大小后使用大量内存
- android - 如何在jetpack compose的安全区域上绘画?
- python - ValueError:未正确调用 DataFrame 构造函数(Databricks/Python)
- .net - 如果同时发出多个请求,则 WireMock 超时