2016-04-27 16 views
0

this oneを含む多くの回答を読みましたので、ではなく、と重複しています(特に私が値を読み取る方法で)。 Pythonで2次元配列の最大値を見つけるための高速コード

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)]) 

:このため速くコードはありますか?たぶんmapと一緒だけど、どうやって見ない?

ボードの各「セル」は、その

  • 'b'ような辞書である=辞書の配列:{'id':3, 'nb':1, 'kind':'bee'}:各dictsは、ゲームのピース、例についての情報を含みます。私たちは、このセルに
  • 'h'それらを置くことができれば我々は=ある作品の'kind'の配列を同じセル上の多くの部分(別の1の上に1枚)
  • 'p' =上記作品のIDの配列を持つことができますまだボードには載っていませんが、このセルを置くことができます。

FYI私はPythonですべての事前計算を行うことができるように、JavaScriptクライアントにJSONで送信する前にボード全体をあらかじめ計算しています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よりループの各反復で最大を計算するだろう、かなり確信しています。

+1

ああ私の神。私は本当に素晴らしい解決策があると確信していました!どうもありがとうございます! –

関連する問題