我一直在嘗試應用一種算法,以基於特定標準將python列表縮小爲較小的列表。由於大量的原單,在100K元素的順序,我試圖itertools爲避免多次內存分配,所以我想出了這個:itertools.islice與列表片段比較
reducedVec = [ 'F' if sum(1 for x in islice(vec, i, i+ratio) if x == 'F')
> ratio/3.0 else 'T'
for i in xrange(0, len(vec), ratio) ]
執行時間爲這需要一個令人擔憂的長時間幾分鐘的順序,當vec有大約10萬個元素時。當我試圖代替:
reducedVec = [ 'F' if sum(1 for x in vec[i:i+ratio] if x == 'F')
> ratio/3.0 else 'T'
for i in xrange(0, len(vec), ratio) ]
在本質上與切片執行是瞬間取代islice。
你能想出一個合理的解釋嗎?我會想,避免重複分配一個新的列表與大量的元素,實際上會節省我幾個計算週期,而不是削弱整個執行。
乾杯, 忒彌斯
可閱讀有關使用''vec.count(「F」是什麼,我,我+比值)''而不是'sum'(如果x =='F')'',vec [i:i +比率]在我看來,它更具可讀性,可能也更快。 – 2011-11-24 11:26:11