0

使用系统库,这将是非常低效的:

foo = "foo bar car haz can bar foo"
repl = {('foo', 'bar'), ('car', 'bar'), ('foo', 'haz')}

for rep in repl:
    foo = foo.replace(rep)

替换批次replace应该在 O(|foo| + |repl|) 中解决这个问题,而不是在上述方法中的 O(|foo| × |repl|) 中。

你能想出一种简洁的方法来实现这个更有效的解决方案吗?

4

1 回答 1

1

使用正则表达式

import re

foo = "foo bar car haz can bar foo"

re.sub(r"(foo|car)", "bar", foo)

> 'bar bar bar haz can bar bar'

实际上在这种情况下它更慢:

import timeit

timeit.timeit('re.sub(r"(foo|car)", "bar", "foo bar car haz can bar foo")', 'import re', number=10000)

> 0.051492929458618164

def test():
    foo = "foo bar car haz can bar foo"
    repl = [('foo', 'bar'), ('car', 'bar'), ('foo', 'haz')]
    for rep in repl:
        foo = foo.replace(*rep)

timeit.timeit("test()", setup="from __main__ import test", number=10000)

> 0.026629924774169922
于 2013-06-28T07:57:35.347 回答