Список доступа к элементам со списком индексов

Рассмотрим большой список именованных элементов (первая строка), возвращенный из большого файла csv (80 МБ) с возможным прерывистым интервалом

name_line =  ['a',,'b',,'c' .... ,,'cb','cc']

Я чтение оставшейся части данных построчно, и мне нужно только обработать данные с соответствующим именем. Данные могут выглядеть как

data_line =  ['10',,'.5',,'10289' .... ,,'16.7','0']

Я пробовал двумя способами. Один извлекает пустые столбцы из каждой строки чтения

blnk_cols = [1,3, ... ,97]
while data:
    ...
    for index in blnk_cols: data_line.pop(index)

, другой - компилирует элементы, связанные с именем из L1

good_cols = [0,2,4, ... ,98,99]   
while data:
    ...
    data_line = [data_line[index] for index in good_cols]

, в данных, которые я использую, там определенно будет больше хороших строк, чем плохих, хотя это может быть до половины и половины.

Я использовал пакет cProfile и pstats, чтобы определить мои самые слабые звенья в скорости, которые предположили, что всплывающее сообщение было самым медленным элементом на данный момент. Я переключился на составление списков, и время почти удвоилось.

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

что мне действительно нужно, так это иметь возможность

data_line = data_line[good_cols]

эффективно передавать список индексов в список, чтобы вернуть эти элементы. Прямо сейчас моя программа работает примерно за 2,3 секунды для файла размером 10 МБ, а всплывающее окно составляет примерно 0,3 секунды.

Есть ли более быстрый способ получить доступ к определенным местоположениям в списке. В C это было бы просто разыменование массива указателей на правильные индексы в массиве.

Дополнения: name_line в файле до чтения

a,b,c,d,e,f,g,,,,,h,i,j,k,,,,l,m,n,

name_line после чтения и разделения (",")

['a','b','c','d','e','f','g','','','','','h','i','j','k','','','','l','m','n','\n']
9
задан Paul Seeb 25 January 2012 в 22:46
поделиться