gpt4 book ai didi

python - 嵌套 for 循环搜索 2 个列表

转载 作者:行者123 更新时间:2023-12-01 06:08:29 24 4
gpt4 key购买 nike

使用: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约为150,000线。

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']]

spectrumFinal 列表本质上是相同的,一个嵌套数组,看起来像这样:

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)

这将添加与 returnList 不匹配的所有项目。

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

returnList = [r120item for r120item in r120Final 
if (r120item[2].strip(), r120item[10]) not in
set((str(spectraItem[0]), str(spectraItem[25]))
for spectraItem in spectraFinal)]

如果您需要完整的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)

关于python - 嵌套 for 循环搜索 2 个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6945806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com