首页 > 解决方案 > Python范围打印两次

问题描述

我目前正在开发一个项目(在 Python 2.7 中),并且在打印两次的for值时遇到了问题。range()我最小化了很多我正在谈论的部分,所以如果只是假设我的代码中还有其他部分。

所以,基本上,我有一个 5 x 5 的板,根据case1and 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

对于case1case2

我有:

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

对于每个board1board2。当我取出与 相关的所有内容时,我得到了预期的结果case2,但是,使用我当前的代码,它正在为打印两次的行打印 range()。

我想知道是否有办法解决这个问题。

对不起,如果我的措辞很不清楚。如果有人为了更清楚而编辑问题/标题,我将不胜感激。

标签: pythonlistfor-looprangepython-2.x

解决方案


正如@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:

在 Python 中复制嵌套列表

分配后列表意外更改。如何克隆或复制它以防止这种情况发生?


推荐阅读