在python中,从字符串中筛选一组子字符串的最快方法是什么?
我看到的是这样一个声明:在python中,从字符串中筛选一组子字符串的最快方法是什么?,python,performance,replace,Python,Performance,Replace,我看到的是这样一个声明: def fn(somelongstring): shorterstring = somelongstring.replace('very, ','').replace('long ', '') fn('some very, very, very, long string') 在Python中执行此类操作最有效的方法是什么 一些注意事项: replace调用的列表很长,但是是固定的,并且是预先知道的 长字符串是函数的一个参数,可以得到大量的字符串;它包括子
def fn(somelongstring):
shorterstring = somelongstring.replace('very, ','').replace('long ', '')
fn('some very, very, very, long string')
在Python中执行此类操作最有效的方法是什么
一些注意事项:
- replace调用的列表很长,但是是固定的,并且是预先知道的
- 长字符串是函数的一个参数,可以得到大量的字符串;它包括子串的重复
- 我的直觉是,删除有机会使用不同的、更快的替换算法
- 链式replace调用可能每个都在字符串上迭代。必须有一种方法来做到这一点,而不需要所有那些重复的迭代
import re
shorterstring = re.sub('very, |long ', '', 'some very, very, very, long string')
您需要确保要替换为nothing的子字符串按长度降序排列,以便首先替换较长的匹配项
或者,您可以避免链式调用,并使用:
reduce(lambda a, b: a.replace(b, ''), ['very, ', 'long '], s)
使用re:
import re
shorterstring = re.sub('very, |long ', '', 'some very, very, very, long string')
您需要确保要替换为nothing的子字符串按长度降序排列,以便首先替换较长的匹配项
或者,您可以避免链式调用,并使用:
reduce(lambda a, b: a.replace(b, ''), ['very, ', 'long '], s)
与OP的方法相比,此方法速度较慢。(454us vs 2.74ms)+1事实上,当字符串很大时,regex将节省大量内存。与OP的方法相比,这要慢一些。(454us vs 2.74ms)+1事实上,当字符串很大时,regex将节省大量内存。