【发布时间】:2021-03-29 08:19:12
【问题描述】:
我目前正在开发一个项目(在 Python 2.7 中),当 range() 的 for 值被打印两次时遇到了问题。
我最小化了很多我正在谈论的部分,所以如果只是假设我的代码中还有其他部分。
所以,基本上,我有一个 5 x 5 的板,根据 case1 和 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()。
我想知道有没有办法解决这个问题。
对不起,如果我的措辞很不清楚。如果有人为了更清楚而编辑问题/标题,我将不胜感激。
【问题讨论】:
-
board2 = list(board)确实不创建一个副本,它的子列表仍然是来自board的列表的引用,所以你对board1或board2所做的任何事情正在影响所有 3 个板。请参阅:stackoverflow.com/questions/2541865/… 如果你解决了这个问题,你还有问题吗?
标签: python list for-loop range python-2.x