Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2d列表或数组:如何修改一个值-即每个单元格的唯一指针?_Python - Fatal编程技术网

Python 2d列表或数组:如何修改一个值-即每个单元格的唯一指针?

Python 2d列表或数组:如何修改一个值-即每个单元格的唯一指针?,python,Python,如何创建每个单元格只有一个指针的列表?(我认为这就是问题所在) 谢谢 ps如果你感觉很好,我如何从打印功能中去掉空格 class Board(object): """board of pieces""" def __init__(self): self.board = [['0']*7]*6 #6x7 grid self.board[3][6] = 8 def printBoard(self): """Display t

如何创建每个单元格只有一个指针的列表?(我认为这就是问题所在)

谢谢 ps如果你感觉很好,我如何从打印功能中去掉空格

class Board(object):
    """board of pieces"""
    def __init__(self):

        self.board = [['0']*7]*6 #6x7 grid
        self.board[3][6] = 8

    def printBoard(self):
        """Display the board array"""
        print self.board
        for i in range(6):
            for j in range(7):
                print self.board[i][j],
            print "\n",

0 0 0 0 0 0 8 
0 0 0 0 0 0 8 
0 0 0 0 0 0 8 
0 0 0 0 0 0 8 
0 0 0 0 0 0 8 
0 0 0 0 0 0 8 

您需要重写self.board,如下所示

self.board = [['0']*7 for i in range(6)]
阅读Python常见问题解答中的列表

以下是常见问题解答中答案的摘录

原因是使用*复制列表不会创建副本,而是 仅创建对现有对象的引用。*3创建一个列表 包含对长度为2的相同列表的3个引用。更改为1 行将显示在所有行中,这几乎肯定不是您所希望的 需要


也许这是重复的,这是我在那里找到的最好的答案:(我改编了这个例子)

您可以使用列表理解

[x[:] for x in [['0']*7]*6]
[['0']*7]*6创建重复6次的同一对象的列表。你 不能只使用它,因为修改一个元素会修改它 每行中都有相同的元素

x[:]相当于列表(x),但由于它 避免名称查找。无论哪种方式,它都会创建每个对象的浅拷贝 行,所以现在所有元素都是独立的


对于多维数组,我更喜欢使用元组索引的字典:

class Board(object):
    """board of pieces"""
    WIDTH = 7
    HEIGHT = 6
    def __init__(self):
        self.board = {}
        for i in range(self.HEIGHT):
            for j in range(self.WIDTH):
                self.board[i,j] = 0

        self.board[3,6] = 8

    def printBoard(self):
        """Display the board array"""
        print self.board
        for i in range(6):
            for j in range(7):
                print self.board[i,j],
            print "\n",

“指针”是什么意思?你说的是“C”指针吗?这会在每行留下尾随的8个指针;不确定这是否是个问题
class Board(object):
    """board of pieces"""
    WIDTH = 7
    HEIGHT = 6
    def __init__(self):
        self.board = {}
        for i in range(self.HEIGHT):
            for j in range(self.WIDTH):
                self.board[i,j] = 0

        self.board[3,6] = 8

    def printBoard(self):
        """Display the board array"""
        print self.board
        for i in range(6):
            for j in range(7):
                print self.board[i,j],
            print "\n",