用于查找2d数组的最大值的快速代码

时间:2016-04-27 04:11:24

标签: python

我已经阅读了很多答案,包括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' = dicts数组:每个dicts包含有关游戏片段的信息,例如:{'id':3, 'nb':1, 'kind':'bee'}。我们可以在同一个单元格上放置多个部分(一个在另一个单元格的顶部)
  • 'p' =如果我们可以将它们放在此单元格上,那么上面各个部分的ID数组
  • 'h' =尚未登上'kind'件的数组,但我们可以放置此单元格

仅供参考我在将整个主板用JSON发送给JavaScript客户端之前预先计算整个主板,这样我就可以在Python中进行所有预先计算,并且必须在JavaScript中编写尽可能少的代码。

1 个答案:

答案 0 :(得分:0)

看起来你的电路板上有一些带有单元格的行,每个单元格都有多个部分。

您可以使用列表推导来获取所有ID,然后获取其最大值:

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

我不确定它会有多快(将取决于你的电路板有多大),但我很确定它会比3 for循环更快并且在每次迭代时计算最大值。