2016-04-27 109 views
0

我讀過很多答案,包括this one因此它的不是重複(特別是與我讀取值的方式)。是否有此一更快代碼:查找二維數組的最大值的快速代碼

mx = 0 
for i in range(0, len(self.board)): 
    for j in range(0, len(self.board[i])): 
     for k in range(0, len(self.board[i][j]['b'])): 
      l = self.board[i][j]['b'][k] 
      mx = max([mx, l.get('id', 0)]) 
在Python

?也許與map,但我不知道如何?

每個板的「細胞」是這樣的

  • 'b' =陣列類型的字典字典:每個類型的字典包含有關一塊的遊戲,例如一個信息:{'id':3, 'nb':1, 'kind':'bee'}。我們可以在同一個小區(1件在另一個頂部)
  • 'p' =陣列上面,如果我們可以把它們放在該小區
  • 'h' =陣列的'kind'是件件的IDS多件尚未在董事會,但我們可以把這種細胞

FYI我預先計算的JSON發送到一個JavaScript客戶端之前,整板,這樣我可以做所有的Python預先計算,並有在JavaScript中儘可能少地編寫代碼。

+1

比'O(n^3)'更快嗎?它看起來像你有一個3D陣列... –

+0

數組是以某種方式排序? 如果數組沒有排序,沒有比查看所有元素是'O(n^2)' – gnicholas

+0

沒有更快的方法了,這是一個包含遊戲片段信息的數組 –

回答

0

看起來你有一個有單元格的行,每個單元有多個單元。

您可以使用列表解析讓所有的ID,然後獲得它的`最大:

max(piece.get('id', 0) for row in self.board for cell in row for piece in cell['b']) 

我不知道這將是多麼快(將ofcourse取決於您的主板有多大),但我很肯定它會比3 for循環更快,並在每次迭代時計算最大值。

+1

我的天啊。我很確定有這麼好的解決方案!非常感謝你! –