python - Python范围打印两次
问题描述
我目前正在开发一个项目(在 Python 2.7 中),并且在打印两次的for
值时遇到了问题。range()
我最小化了很多我正在谈论的部分,所以如果只是假设我的代码中还有其他部分。
所以,基本上,我有一个 5 x 5 的板,根据case1
and case2
,我正在复制板list()
并对其进行更改。然后,我想要一列数字说明行号,以便输出类似于:
1 O O O O O
2 O O O O O
3 O O O O O
4 O O O O O
5 O O O O O
对于case1
和case2
。
我有:
board = []
# Creating board
for i in range(5):
board.append(["O"] * 5)
case1 = True
case2 = True
if case1 == True:
board1 = list(board) #Making duplicate of board
# I took out a lot of the code making alterations to board1
for i in range(5):
board1[i].insert(0, str(i + 1) + " ")
if case2 == True:
board2 = list(board) #Making duplicate of board
# I took out a lot of the code making alterations to board2
for i in range(5):
board2[i].insert(0, str(i + 1) + " ")
#Printing the boards
for i in range(5):
print " ".join(board1[i])
print "\n\n" #Just a gap
for i in range(5):
print " ".join(board2[i])
但是,输出是:
1 1 O O O O O
2 2 O O O O O
3 3 O O O O O
4 4 O O O O O
5 5 O O O O O
对于每个board1
和board2
。当我取出与 相关的所有内容时,我得到了预期的结果case2
,但是,使用我当前的代码,它正在为打印两次的行打印 range()。
我想知道是否有办法解决这个问题。
对不起,如果我的措辞很不清楚。如果有人为了更清楚而编辑问题/标题,我将不胜感激。
解决方案
正如@Random Davis 指出的那样,问题出在您复制列表列表以创建 board1 和 board2 的事实。
board1=list(board)
board2=list(board)
这样,当您将值 1-5 插入到 board1 时,它们也会插入到 board2 中,因为它们仍然是对 board 的引用,因此当您在 board2 中插入值时,它们会被第二次插入。
为避免这种情况,您必须创建 board1、board2,如下所示:
board1=[list(i) for i in board]
board2=[list(i) for i in board]
一切都会正常工作
在这里检查为什么对 board1 的更改会反映到 board2:
推荐阅读
- javascript - 在本机脚本 Angular 中接收来自模态的两个回调
- flutter - 颤动本地通知发送带有有效负载选项的 ID
- r - 使用 RStudio 和 Windows 任务计划程序发送自动电子邮件的替代方法。RStudio 连接?
- java - 为什么 Java 找不到 CLASSPATH 中的类?
- python - 每次出现都要重复的 if 语句
- r - 带有 vcovCL 的 POLR 有序 logit 上的聚集标准错误给出“不一致的参数”错误
- java - SecondaryTable 可以是 OneToMany 关系吗?
- reactjs - 在 Kubernetes Ingress 后面为静态反应应用程序提供服务
- c - C 编程 为什么这段代码显示分段错误(核心转储)?
- function - 封装 Powershell 函数