Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,从字符串中筛选一组子字符串的最快方法是什么?_Python_Performance_Replace - Fatal编程技术网

在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调用可能每个都在字符串上迭代。必须有一种方法来做到这一点,而不需要所有那些重复的迭代
使用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)
使用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将节省大量内存。