簡體   English   中英

Python:如何在矩陣中反向訪問對角線?

[英]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 列表中-實際上意味着從最后一個元素。

其他解決方案是使用lambdamap 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM