在Python中访问矩阵中的列

时间:2015-04-18 18:50:59

标签: python

我正在尝试创建一个简单的tictactoe游戏,并尝试将行保存到行[]和列到列[],以便我可以通过执行[row] [col]来访问板中的每个元素

我在第一个循环中遍历矩阵时保存了行,但无法保存列索引。关于我做错什么以及如何正确做到的任何想法?

下面是代码:

board = [ 
            ['|', '|', '|' ],
            ['|', '|', '|'],
            ['|', '|', '|'] 
        ] 

row = []
col = []

def tictactoe ():

    # print('\n'.join([''.join(['{:4}'.format(item) for item in row]) for row in board]))

    for i in range(0,len(board)):
        row.append(board[i])
        for j in (0, len(board)):
            col.append(board[j])


    print(row, '!!!!!')
    print(col)

3 个答案:

答案 0 :(得分:2)

尝试

board = [ 
            ['|', '|', '|' ],
            ['|', '|', '|'],
            ['|', '|', '|'] 
        ] 

row = []
col = []

def tictactoe ():

    # print('\n'.join([''.join(['{:4}'.format(item) for item in row]) for row in board]))

    for i in range(0,len(board)):
        row.append(board[i])
        for j in range(0, len(board[i])):
            col.append(board[i][j])


    print(row, '!!!!!')
    print(col)

基本上在您的示例中,您始终只访问board列表中的项目(即行),以访问board列表中列表的项目(即列),您需要首先访问boards数组中的列表(例如,使用board[i]),然后在此之后完成您要访问的项目{{1例如。

建议是,不要使用board[i][j],而是直接使用列表迭代器,如下所示:for i in range(0, len(board))。在这种情况下,for i in board不是整数,而是您正在访问的i变量的元素。你的代码会变成这样:

board

请注意,访问列的语法也会更改:我们只使用board = [ ['|', '|', '|' ], ['|', '|', '|'], ['|', '|', '|'] ] row = [] col = [] def tictactoe (): # print('\n'.join([''.join(['{:4}'.format(item) for item in row]) for row in board])) for i in board: row.append(i) for j in i: col.append(j) print(row, '!!!!!') print(col) 而不是board[i][j],而for j in i变量将包含列值本身。 (因为ji变量)

中包含的行

答案 1 :(得分:0)

您在以下行中迭代列时忘记了范围:

for j in (0, len(board)):

答案 2 :(得分:0)

除了Fernando的答案解释你的方法出了什么问题以及如何解决它之外,以下是如何以简化的方式实现同​​样的事情:

def tictactoe():
    rows = board # board is already an array containing the rows.
    cols = zip(*board)

    print(rows)
    print(cols)