为了账号安全,请及时绑定邮箱和手机立即绑定

更改 2D Char 列表中的元素

更改 2D Char 列表中的元素

小唯快跑啊 2021-09-11 16:48:54
我想访问和更改我的 2D 字符列表中的单个字符。但是,当我更改一个时,它会更改整个列。为什么是这样?我究竟做错了什么?在第 31 行:我正在修改数组中的一个元素,但得到的结果与我想要和期望的结果不同。下面是我的代码:from random import *class chessBoard:    BOARD       = None    BOARD_WIDTH = 8    def __init__(self,W = 8):       self.BOARD = []       self.BOARD_WIDTH = W       aRow = ['.'] * self.BOARD_WIDTH       for curRow in range(self.BOARD_WIDTH):           self.BOARD.append(aRow)    def printBoard(self):       for curRow in self.BOARD:          print(curRow)    def initialiseRandomQ(self,N):       cords = []       for ii in range(self.BOARD_WIDTH):          for jj in range(self.BOARD_WIDTH):              cords.append( [ii,jj] )       shuffle(cords)       self.BOARD[0][0] = '1'       # for curQ in range(N):       #     xx = cords[curQ][0]       #     yy = cords[curQ][1]       #     print(xx,yy)       #     print(cords[curQ])        #     self.BOARD[xx][yy] = 'Q'#PROGRAM START#N_QUEENS    = 2myChessBoard = chessBoard()myChessBoard.initialiseRandomQ(2)myChessBoard.printBoard()
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

这个:


class chessBoard:


    BOARD       = None

    BOARD_WIDTH = 8


    def __init__(self,W = 8):

       self.BOARD = []

       self.BOARD_WIDTH = W


       aRow = ['.'] * self.BOARD_WIDTH      # this is one list, it's a reference to data

       for curRow in range(self.BOARD_WIDTH):

           self.BOARD.append(aRow)          # adds the same reference 8 times

您的列表包含 8 次相同的参考,如果您通过一个参考更改数据,则其他参考(至多相同)也会反映这一点。所有引用都指向相同的数据。



           self.BOARD.append(['.'] * self.BOARD_WIDTH) # add "unique" lists instead

您可以检查id()的:


# your version ( self.BOARD.append(aRow) )

print(list(map(id,myChessBoard.BOARD))) 


[140415825494600, 140415825494600, 140415825494600, 140415825494600,

 140415825494600, 140415825494600, 140415825494600, 140415825494600]


# fixed version (self.BOARD.append(['.'] * self.BOARD_WIDTH))

[140560309994568, 140560309994440, 140560309994376, 140560309994312, 

 140560309994248, 140560309994184, 140560309994120, 140560309994696]


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信