【发布时间】:2021-05-18 20:52:34
【问题描述】:
在给定表格的情况下,替换单词列表中的子字符串的最佳/最佳方式是什么。假设单词的数量可能非常大。此外,可以假设每个单词只需要 1 个匹配项或只有 1 个匹配项。如果找到匹配项,则无需替换甚至检查其他子字符串。
我目前的解决方案是蛮力,取 O(nmk):
words = ['dfacatlgajd', 'sdfalafjump', 'adfasfhagl']
conversion = {'cat': 'dog',
'car': 'zoom',
'jump': 'over'}
new_words = []
for word in words:
updated = False
for k, v in conversion.items():
if k in word:
new = word.replace(k, v)
updated = True
new_words.append(new)
break
if not updated:
new_words.append(word)
print(new_words)
输出:
['dfadoglgajd', 'sdfalafover', 'adfasfhagl']
【问题讨论】:
-
您可以使用
for .. else构造而不是保留标志 (updated),否则您的代码就可以了。 -
寻找更优化的解决方案。我必须用这个实现多次迭代一个词
-
将
re.sub()与repl函数一起使用。 -
@martineau 这也是我的第一个想法,但是在测试它时,它的运行速度比原始代码慢得多。
-
您是否使用了匹配任何子字符串的(单个)正则表达式模式?
标签: python algorithm performance optimization