【问题标题】:What is the fastest way to filter a set of substrings from a string in python?从python中的字符串中过滤一组子字符串的最快方法是什么?
【发布时间】:2013-09-18 07:12:54
【问题描述】:

我正在查看如下语句:

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

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

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


一些注意事项:

  • replace 调用列表很长,但已预先确定且已知
  • 长字符串是函数的参数,可以变得庞大;它包括子字符串的重复
  • 我的直觉是删除有机会使用来自替换的不同、更快的算法
  • 链式替换调用可能每次都在字符串上进行迭代。必须有一种方法可以在没有所有这些重复迭代的情况下做到这一点。

【问题讨论】:

标签: python performance replace


【解决方案1】:

使用回复:

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

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

或者,您可以避免链接调用,并使用:

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

【讨论】:

  • 与 OP 的方法相比,这更慢。 (454 us vs 2.74 ms)
  • +1 确实,当字符串很大时,正则表达式会节省大量内存。
猜你喜欢
  • 2021-12-28
  • 1970-01-01
  • 2017-04-10
  • 2023-03-31
  • 1970-01-01
  • 2013-08-22
  • 2015-01-14
  • 2017-05-19
  • 1970-01-01
相关资源
最近更新 更多