我有两个传递给函数的字符串列表。它们或多或少是相同的,除了已经通过正则表达式过滤器运行以删除某些样板子字符串(例如,从“Blues Brothers LLC”中删除“LLC”)。
此函数用于在内部对修改后的列表进行重复数据删除,并删除未修改列表中的关联项。您可以假设这些列表在通过正则表达式过滤器之前按字母顺序排序,并保持相同的顺序(即 original[x] 和 modified[x] 指的是同一个实体,即使 original[x] != modified[ X])。必须在输出中的两个列表之间保持相对顺序。
这就是我到目前为止所拥有的。它在 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
这很丑,但这是我的全部。我的测试表明问题是由最后一段代码造成的。
修改或全新的方法将不胜感激。我的下一步是尝试使用字典。