[英]Python: How to access a diagonal in reverse in a matrix?
我正在嘗試創建一個井字游戲程序,我需要在 3x3 矩陣中返回對角線。
假設我的電路板如下所示:
board = [
["a", "x", "b"],
["c", "o", "d"],
["e", "f", "g"]
]
我有前向矩陣:
diag = [board[i][i] for i in range(len(board))]
返回:
>>> diagonal(board, 1)
['a', 'o', 'g']
(如果可能的話,有人可以向我解釋為什么這樣做。我不太擅長理解列表......)。
我將如何 go 獲得反向? 比如說['b', 'o', 'e']
?
謝謝!
您的董事會是一個包含三個項目的列表,這些項目也是列表。 因此, i
將從 0 迭代到 2 (含)。 通過調用 board[i][i],您正在調用三個命令: board[0][0]
、 board[1][1]
、 board[2][2]
。 在基本的一維列表中, board[0] 將引用第一個元素, board[1] 將引用第二個元素,依此類推。使用二維數組,在命令board[0][0]
中,您將調用第一個元素板的第一個元素(基本上"a"
)。 接下來,您將向右移動一步和底部一步,並且您正在調用棋盤的第二個元素( "o"
)的第二個元素。 這就是代碼背后的邏輯。
要獲得另一個對角線,您必須使用:
diag = [board[i][len(board) - 1 - i] for i in range(len(board))]
這意味着您不是調用board[0][0]
,而是調用board[0][3 - 1 - 0]
,即board[0][2]
。 下一次迭代將調用board[1][1]
和下一個board[2][0]
。 您首先從長度中減去 1,因為長度計數從 1 開始(例如,您的板上有三個元素, len(board) = 3
),而索引從 0 開始( board[0][3]
不存在,只有board[0][0]
、 board[0][1]
和board[0][2]
)。 希望這可以幫助!
您的行將僅作為第一種情況增加。 只有列索引會改變。 您將從末尾開始並通過遞減它向左移動。
對於正對角線:您正在獲取(row_index==col_index) => (0,0), (1,1), (2,2)
的位置
反向:從末端開始,向左側移動。
嘗試:
diag = [board[i][len(board)-1-i] for i in range(len(board))]
['b', 'o', 'e']
為了獲得對角線元素,您可以執行以下操作。
對於前導對角線:
leading_diagonal = [ row[i] for i,row in enumerate(board) ]
對於反對角線:
counter_diagonal = [ row[-i-1] for i,row in enumerate(board) ]
在上述方法中,它遍歷每一行,計算它在i
處的索引,並采用row[i]
,對於0th
行,元素將為0
,依此類推。 對於反對角線,它需要row[-i-1]
其中-i-1
是-(i+1)
。 在 Python 列表中-
實際上意味着從最后一個元素。
其他解決方案是使用lambda
和map
function:
對於前導對角線:
leading_diagonal = list(map(lambda x: x[board.index(x)], board))
對於反對角線:
counter_diagonal = list(map(lambda x: x[(len(board) - 1) - board.index(x)], board))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.