最初的问题:对于给定的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)