itertools.islice по сравнению с фрагментом списка

Я пытался применить алгоритм, чтобы уменьшить список питонов в меньший список на основе определенных критериев. Из-за большого объема исходного списка, порядка 100 тыс. Элементов, я попытался использовать itertools для избежания многократного выделения памяти, поэтому придумал следующее:

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 около 100 тыс. Элементов. Когда я попробовал вместо этого:

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 на срез, выполнение выполняется мгновенно.

Можете ли вы придумать правдоподобное объяснение этому? Я бы подумал, что избегая многократного выделения нового списка со значительным количеством элементов, на самом деле я бы сэкономил несколько вычислительных циклов вместо того, чтобы наносить вред всему исполнению.

Ура, Фемида

Ответы на вопрос(2)

Ваш ответ на вопрос