检查2d列表中的对角线(Python)

Let*_*t4U 2 python 2d

最初的问题:对于给定的3x3 tic tac toe board,检查其中一个玩家是否赢了.

到目前为止,我提出的最简单的解决方案是旋转矩阵并总结每一行:

board
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]

pr(board)
0 1 2
3 4 5
6 7 8

pr(zip(*board))
0 3 6
1 4 7
2 5 8
Run Code Online (Sandbox Code Playgroud)

0..9以上数字仅用于显示棋盘上的位置,通常他们将为球员1填充1,为球员2填充-1,为未填充位置填充0.逐行进行,如果总和达到3或-3,则这是获胜区块.

但是,不检查对角线.有没有办法以优雅+高效的方式从这样的矩阵中提取对角线?我并不是指"手动"(0,1,2)使用普通索引,而是获得nxn矩阵的对角线.

PS pr只是打印2d列表的辅助函数:

def pr(x):
    for row in x:
        print ' '.join(map(str, row))
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 10

你可以得到一个对角线:

[r[i] for i, r in enumerate(board)]
# [0, 4, 8]
Run Code Online (Sandbox Code Playgroud)

与对角线相对:

[r[-i-1] for i, r in enumerate(board)]
# [2, 4, 6]
Run Code Online (Sandbox Code Playgroud)

  • 你可以将`-i-1`变成`~i` (2认同)