我有一些正在运行的python代码,但需要一段时间才能运行。我很确定它可以通过重新安排for循环或使用函数来优化,但我的尝试产生了不可思议的结果。
项目信息:
python version = Iron Python 2.7(Revit Dynamo)
listMaster =所有可用句子的主列表
List1 =要与listMaster进行比较的第二个句子列表
List2 =要与listMaster进行比较的第三个句子列表
当前工作流程:
对List2,List3等重复上面
# Compare Excel Serious Warnings with All Revit Data
for itemExcel in warnSeriousExcelData:
for itemRvt in revitData:
if SequenceMatcher(None, itemRvt, itemExcel).ratio() > 0.9:
seriousLstCount = seriousLstCount + 1
srsData.append(itemExcel)
# Compare Excel Troublesome Warnings with All Revit Data
for itemExcel in warnTroublesomeExcelData:
for itemRvt in revitData:
if SequenceMatcher(None, itemRvt, itemExcel).ratio() > 0.9:
troubleLstCount = troubleLstCount + 1
troubleData.append(itemExcel)
# Compare Excel Bothersome Warnings with All Revit Data
for itemExcel in warnBothersomeExcelData:
for itemRvt in revitData:
if SequenceMatcher(None, itemRvt, itemExcel).ratio() > 0.9:
botherLstCount = botherLstCount + 1
botherData.append(itemExcel)
# Compare Excel Benign Warnings with All Revit Data
for itemExcel in warnBenignExcelData:
for itemRvt in revitData:
if SequenceMatcher(None, itemRvt, itemExcel).ratio() > 0.89:
benignLstCount = benignLstCount + 1
benignData.append(itemExcel)
# Compare Excel Unrecoverable Warnings with All Revit Data
for itemExcel in warnUnrecoverExcelData:
for itemRvt in revitData:
if SequenceMatcher(None, itemRvt, itemExcel).ratio() > 0.8:
unrecoverLstCount = unrecoverLstCount + 1
unrecoverData.append(itemExcel)
如果有帮助,请参阅数据图像。 Data Image Example
我正在考虑加快迭代过程,可能会翻转for循环。那么顶部循环将是整个listMaster,然后我会检查那个for循环中的每个List1,List2?但我不知道这是否是最快的方法呢?
对此的任何帮助都会很棒。我再次使用Python 2.7,所以我不能使用3.5等中的一些新功能。
更新以运行减少循环长度但仍然运行缓慢。
for itemRvt in revitData:
for itemExcel in warnSeriousExcelData:
if SequenceMatcher(None, itemRvt, itemExcel).ratio() > 0.9:
seriousLstCount = seriousLstCount + 1
srsData.append(itemExcel)
for itemExcel in warnTroublesomeExcelData:
if SequenceMatcher(None, itemRvt, itemExcel).ratio() > 0.9:
troubleLstCount = troubleLstCount + 1
troubleData.append(itemExcel)
for itemExcel in warnBothersomeExcelData:
if SequenceMatcher(None, itemRvt, itemExcel).ratio() > 0.9:
botherLstCount = botherLstCount + 1
botherData.append(itemExcel)
for itemExcel in warnBenignExcelData:
if SequenceMatcher(None, itemRvt, itemExcel).ratio() > 0.89:
benignLstCount = benignLstCount + 1
benignData.append(itemExcel)
for itemExcel in warnUnrecoverExcelData:
if SequenceMatcher(None, itemRvt, itemExcel).ratio() > 0.8:
unrecoverLstCount = unrecoverLstCount + 1
unrecoverData.append(itemExcel)
马特
答案 0 :(得分:0)
要多次有效地查找数据条目,不应使用列表来存储它们,而应使用字典或散列表。未排序的列表会强制您为每个查找迭代整个事物。字典或哈希表要快得多。数千倍的速度,有很多条目。将您的warnXyzExcelData
集合转换为字典,一切都会好的。修复非常简单。祝你好运,玩得开心!