関数に渡される文字列のリストが2つあります。それらは、特定の定型サブストリングを削除するために正規表現フィルターを通過したことを除いて、ほぼ同じです(たとえば、「BluesBrothersLLC」から「LLC」を削除します)。
この関数は、変更されたリストを内部的に重複排除し、変更されていないリストの関連アイテムを削除することを目的としています。これらのリストは、正規表現フィルターを実行する前にアルファベット順に並べ替えられ、同じ順序のままであると想定できます(つまり、original [x]!= modify [であっても、original[x]とmodified[x]は同じエンティティを参照します。バツ])。出力の2つのリスト間で相対的な順序を維持する必要があります。
これは私がこれまでに持っているものです。入力とボイラープレート文字列の非常にまれな組み合わせ(1000分の1)を除いて、99%の時間で機能し、一部の出力文字列は単一のリスト位置によって不一致になります。入力リストは「元の」および「変更された」です。
# record positions of duplicates so we're not trying to modify the same lists we're iterating
dellist_modified = []
dellist_original = []
# probably not necessary, extra precaution against modifying lists being iterated.
# fwiw the problem still exists if I remove these and change their references in the last two lines directly to the input lists
modified_copy = modified
original_copy = original
for i in range(0, len(modified)-1):
if modified[i] == modified[i+1]:
dellist_modified.append(modified[i+1])
dellist_original.append(original[i+1])
for j in dellist_modified:
if j in modified:
del modified_copy[agg_match.index(j)]
del original_copy[agg_match.index(j)]
# return modified_copy and original_copy
それは醜いです、しかしそれは私が得たすべてです。私のテストでは、問題はコードの最後のチャンクによって作成されていることが示されています。
変更またはまったく新しいアプローチをいただければ幸いです。次のステップは、辞書を使ってみることです。