Python で 2D 配列の列内の特定の要素の出現回数をカウントする関数のパフォーマンスを改善しようとしています。時間は cProfile からのもので、count()
357595 回の呼び出しで 0.08 秒しかかかっていないこともわかります。
for ループが最速です (357595 回の呼び出しで .375 秒):
def count_column(grid, j, element):
count = 0
for x in range(0, len(grid)):
if grid[x][j] == element:
count += 1
return count
リスト内包表記は無視できるほど遅くなります (357595 呼び出しで .400 秒):
def count_column(grid, j, element):
return [x[j] for x in grid].count(element)
Zip は非常に遅い (357595 呼び出しで .741 秒):
def validate_column(grid, j, element):
return zip(*grid)[j].count(element)
これを行うためのより高速な方法はありますか、または配列をフラット化するのが最善の方法でしょうchain.from_iterable
か?