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