我試圖提高一個函數的性能,該函數計算Python中2D數組的列中某個元素的出現次數。時間來自cProfile,它也告訴我count()
每357595次呼叫只需要〜.08s。從Python中的二維數組中選擇列的最快方法?
for循環是最快的(爲357595個呼叫.375s):
def count_column(grid, j, element):
count = 0
for x in range(0, len(grid)):
if grid[x][j] == element:
count += 1
return count
列表解析是由可忽略的量更慢(.400s爲357595個呼叫):
def count_column(grid, j, element):
return [x[j] for x in grid].count(element)
郵編是最慢的一個巨大的餘地(對於357595電話.741s):
def validate_column(grid, j, element):
return zip(*grid)[j].count(element)
有沒有更快的方法來做到這一點,或最好的方法是用chain.from_iterable
來平坦化陣列?
你有沒有考慮過使用'numpy'? –
在任何其他情況下,我完全可以,但是我必須運行該腳本的計算機沒有它,我也沒有被允許安裝它。 – xjtian
這是Python 2還是3? – abarnert