我覺得這是我缺少的一個非常明顯的修復程式,并且是從我的主程式中截取的一個小片段。
emptyBoard = [['N', 'N', 'N'], ['N', 'N', 'N'], ['N', 'N', 'N']]
for i in range(3):
otherBoard = emptyBoard
otherBoard[1][i] = 'Y'
print(otherBoard)
運行程式時輸出以下內容:
[['N', 'N', 'N'], ['Y', 'N', 'N'], ['N', 'N', 'N']]
[['N', 'N', 'N'], ['Y', 'Y', 'N'], ['N', 'N', 'N']]
[['N', 'N', 'N'], ['Y', 'Y', 'Y'], ['N', 'N', 'N']]
但我想要的輸出是:
[['N', 'N', 'N'], ['Y', 'N', 'N'], ['N', 'N', 'N']]
[['N', 'N', 'N'], ['N', 'Y', 'N'], ['N', 'N', 'N']]
[['N', 'N', 'N'], ['N', 'N', 'Y'], ['N', 'N', 'N']]
我的意圖是在每次新迭代時將 otherBoard 重置為 emptyBoard ,但這似乎沒有發生?
謝謝
uj5u.com熱心網友回復:
otherBoard = emptyBoard使兩個變數都指向同一個串列。由于兩個變數都指向同一個物件,因此更改該物件將通過兩個變數反映出來。
做你真正想要的最簡單的方法應該是:
import copy
emptyBoard = [['N', 'N', 'N'], ['N', 'N', 'N'], ['N', 'N', 'N']]
for i in range(3):
otherBoard = copy.deepcopy(emptyBoard)
otherBoard[1][i] = 'Y'
print(otherBoard)
copy.deepcopy()將創建給定串列及其子串列的不同但相同的副本。然后,您指定otherBoard指向該新的、完全獨立的、復制的串列,您所做的任何更改都不會反映在舊串列上。
一個更快但可能更容易出錯的解決方案,不需要任何額外的匯入,將是
emptyBoard = [['N', 'N', 'N'], ['N', 'N', 'N'], ['N', 'N', 'N']]
for i in range(3):
otherBoard = emptyBoard
oldValue = otherBoard[1][i]
otherBoard[1][i] = 'Y'
print(otherBoard)
otherBoard[1][i] = oldValue
只需更改串列,然后立即將其更改回來。
uj5u.com熱心網友回復:
您可以使用以下代碼來完成任務。實際上,otherBoard = emptyBoard沒有列出第二個串列。otherBoard和都在emptyBoard賦值之后參考同一個串列,因為賦值只是復制了對串列的參考。
emptyBoard = [['N', 'N', 'N'], ['N', 'N', 'N'], ['N', 'N', 'N']]
for i in range(3):
otherBoard = emptyBoard.copy()
secondbord = otherBoard[1].copy()
secondbord[i] = 'Y'
otherBoard[1] = secondbord
print(otherBoard)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/511133.html
標籤:Python循环变量
下一篇:如果行滿足條件,則列值的總和
