2016-04-27 81 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

我的天啊。我很确定有这么好的解决方案!非常感谢你! –