在python中从字符串中过滤一组子串的最快方法是什么?

时间:2013-09-13 14:37:41

标签: python performance replace

我正在查看看起来像这样的声明:

def fn(somelongstring):
    shorterstring = somelongstring.replace('very, ','').replace('long ', '')

fn('some very, very, very, long string')

在Python中执行此类操作的最有效方法是什么?


一些注意事项:

  • 替换呼叫列表很长,但已修复并提前知道
  • 长字符串是函数的参数,可以变大;它包括重复的子串
  • 我的直觉是删除有机会使用替换
  • 的不同,更快的算法
  • 链式替换调用可能都是遍历字符串。必须有一种方法可以在没有所有重复迭代的情况下完成此任务。

1 个答案:

答案 0 :(得分:3)

使用re:

import re
shorterstring = re.sub('very, |long ', '', 'some very, very, very, long string')

您需要确保要替换为无的子字符串按长度的降序排列,以便首先替换较长的匹配。

或者,您可以避免链接的呼叫,并使用:

reduce(lambda a, b: a.replace(b, ''), ['very, ', 'long '], s)