Я пытаюсь применить алгоритм для сокращения списка python до меньшего, основанного на определенных критериях. Из-за большого объема исходного списка в порядке 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 на срез, выполнение выполняется мгновенно.
Можете ли вы представить себе правдоподобное объяснение этому? Я бы подумал, что избегать многократного выделения нового списка с большим количеством элементов, на самом деле спасет мне несколько вычислительных циклов, а не калечит все выполнение.
Cheers, Фемида