Python 嵌套for循环以搜索2个列表

Python 嵌套for循环以搜索2个列表,python,search,string-matching,nested-loops,nested-lists,Python,Search,String Matching,Nested Loops,Nested Lists,使用:Python 2.4 目前,我有一个嵌套的for循环,它迭代两个列表,并基于两个列表中存在的两个元素进行匹配。一旦找到匹配项,它将从r120Final列表中删除元素并放入名为“r120Delta”的新列表: 问题是这太慢了,而且列表也没有那么深。R120约为64000条谱线,光谱约为150000条谱线 r120Final列表是一个嵌套数组,看起来是这样的: r120Final[0] = [['xxx','xxx','12345','xxx','xxx','xxx','xxx','xxx',

使用:Python 2.4

目前,我有一个嵌套的for循环,它迭代两个列表,并基于两个列表中存在的两个元素进行匹配。一旦找到匹配项,它将从r120Final列表中删除元素并放入名为“r120Delta”的新列表:

问题是这太慢了,而且列表也没有那么深。R120约为64000条谱线,光谱约为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[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']]
spectraFinal列表本质上是相同的,是一个嵌套数组,看起来是这样的:

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[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,但决不是专家。我正在寻找一些专家来告诉我如何加快速度。感谢您的帮助

spectra_set = set((str(spectraItem[0]), str(spectraItem[25])) for spectraItem in spectraFinal)

returnList = []
for r120item in r120Final:
    if (r120item[2].strip(), r120item[10]) not in spectra_set:
       returnList.append(r120item)
这将添加所有与
返回列表不匹配的项目

你可以在一行中完成(如果你真的想要的话)

如果您需要完整的
spectraItem

spectra_dict = dict(((str(spectraItem[0]), str(spectraItem[25])), spectraItem) for spectraItem in spectraFinal)
returnList = []
for r120item in r120Final:
    key = (r120item[2].strip(), r120item[10])
    if key not in spectra_dict:
        returnList.append(r120item)
    else:
        return_item = some_function_of(r120item, spectra_dict[key])
        returnList.append(return_item)

r120Final和spectralFinal是两个不同的文件,其中每个列表项都是文件中的一行吗?如果是这样的话,我可以向您展示如何使用命令行快速完成这项工作。您可能还想了解Numpy(),它对多维数组的切片和切分有很大的支持。哇,这很有帮助。。。很多现在,我如何使用它来匹配两个列表中的元素并合并它们?比方说,一旦找到匹配项,我想将R120最终数据元素和一些选定的spectraFinal元素合并在一起,例如spectraFinal[8]、spectraFinal[5]、spectraFinal[2]和spectraFinal[23]?编辑以显示如何接近相同的速度并仍然访问完整的
spectraItem
,我想这就是你的意思。这绝对是有帮助的,但你能告诉我,如果,比方说,我想选择我上面提到的spectraItems吗?那会击中它的头部。:)