python-3.x - 更改 2D 列表中的元素会更改整列中的元素
问题描述
我最近参加了一个有竞争力的编程竞赛,但被一个问题卡住了。问题是艾达·金。[问题链接] [1]:https ://www.codechef.com/JULY20B/problems/ADAKING
我解决这个问题的方法是,如果我们从顶部开始在棋盘上为国王留下 ak 个空方格,然后用障碍物填充剩余的方格,那么国王只能移动 k 个单元格。逻辑结果是正确的,但是在我编写的代码中,我无法将第一行的第一个方格更改为包含代表国王的“O”,程序有时将第一列的所有元素都更改为“O”或前两个。同样的故事与'。用于表示空方格。有人可以看看我的代码并提出任何更正
x=['X' for __ in range(8)]
dot=['.' for ___ in range(8)]
t=int(input())
for _ in range(t):
arr=[]
for i in range(8):
arr+=[x]
k=int(input())
row=k//8
extra=k%8
for i in range(row):
arr[i]=dot
for j in range(extra):
arr[row][j]='.'
arr[0][0]='O'
for i in arr:
print(*i)
解决方案
您遇到了list mutability的问题。解决问题的一种方法是使用 复制列表[:]
。arr+=[x[:]]
所以用and替换这两行arr[i]=dot[:]
。
推荐阅读
- css - 如何在不使用 z-index 的情况下隐藏另一个项目下的项目
- laravel - 类 Database\Seeds\PermissionsTableSeeder 不存在
- php - 如何从 laravel 5 中的两个相关表中获取数据
- c# - 找不到注册视图模型
- node.js - 节点usb,没有收到数据
- intellij-idea - 如何在 IntelliJ 中重命名我的整个项目而无需太多手动步骤?
- django - RUN pip install -r requirements.txt 不会在 docker 容器中安装要求
- python - 如何修复此代码的“无效语法”错误
- cmake - 共享对象库未列出特定的共享对象依赖项
- docker - 即使完全停止 Docker 服务,Docker 容器仍在运行