簡體   English   中英

Python 范圍打印兩次

[英]Python range is printed twice

我目前正在開發一個項目(在 Python 2.7 中),當range()for值被打印兩次時遇到了問題。 我最小化了很多我正在談論的部分,所以如果只是假設我的代碼中還有其他部分。

所以,基本上,我有一個 5 x 5 的板,根據case1case2 ,我正在使用list()復制板並對其進行更改。 然后,我想要一列數字說明行號,這樣 output 將類似於:

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])

但是,output 是:

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() 。

我想知道是否有辦法解決這個問題。

對不起,如果我的措辭很不清楚。 如果有人為了更清楚而編輯問題/標題,我將不勝感激。

正如@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 中復制嵌套列表

分配后列表意外更改。 如何克隆或復制它以防止這種情況發生?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM