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

时间:2012-02-17 20:22:49

标签: 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 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 

4 个答案:

答案 0 :(得分:3)

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

self.board = [['0']*7 for i in range(6)]

阅读Python FAQ中的creating multidimentional列表。

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

  

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

答案 1 :(得分:1)

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

        self.board = [['0']*7 for i in range(6)] #6x7 grid
        self.board[3][6] = '8'

    def printBoard(self):
        """Display the board array"""
        print self.board
        for i in range(6):
            print ''.join(self.board[i])

答案 2 :(得分:1)

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

  

您可以使用列表推导

[x[:] for x in [['0']*7]*6]
     

[['0'] * 7] * 6创建重复6次的同一对象的列表。您   不能只使用它,因为修改一个元素将修改它   每行中相同的元素!

     

x [:]相当于list(X),但是因为它有点效率   避免名称查找。无论哪种方式,它都会创建每个的浅层副本   行,所以现在所有元素都是独立的。

答案 3 :(得分:0)

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

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",