Использование: Python 2.4
В настоящее время у меня есть вложенный цикл for, который повторяет более 2 списков и сопоставляет два элемента, присутствующих в обоих списках. Как только совпадение найдено, он входит в список из списка r120Final и добавляет новый список с именем "r120Delta":
for r120item in r120Final:
for spectraItem in spectraFinal:
if(str(spectraItem[0]) == r120item[2].strip()) and (str(spectraItem[25]) == r120item[10]):
r120Delta.append(r120item)
break
Проблема в том, что это ТАК МЕДЛЕННО, а списки не такие глубокие. R120 имеет около 64 000 линий, а Spectra - около 150000 линий.
Список r120Final является вложенным массивом и выглядит так:
r120Final[0] = [['xxx','xxx','12345','xxx','xxx','xxx','xxx','xxx','xxx','xxx','234567']]
...
r120Final[n] = [['xxx','xxx','99999','xxx','xxx','xxx','xxx','xxx','xxx','xxx','678901']]
Список spectraFinal по сути тот же, вложенный массив, и выглядит это так:
spectraFinal[0] = [['12345','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','234567']]
...
spectraFinal[0] = [['99999','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','xxx','678901']]
Наконец, причина для «r120Delta» заключается в том, что я могу затем сделать дифференциал списка между r120Final и r120Delta и получить элементы данных r120, которые НЕ были сопоставлены. Это функция, которую я определил для этой самой задачи, и снова медленно:
def listDiff( diffList, completeList ):
returnList = []
for completeItem in completeList:
if not completeItem in diffList:
returnList.append(completeItem)
return returnList
По сути, я хорошо осведомлен в Python, но ни в коем случае не эксперт. Я ищу экспертов, чтобы показать мне, как это ускорить. Любая помощь приветствуется!