Python 字符串多替换时性能基准测试
结论
先说结果, 直接替换是最好的. replace 一层层用, 方法笨了一点, 还可以.
懒得打字, 贴代码就完事了.
基准测试1
from cProfile import run
s = '1 a 2 \n \t \r e34234'
def _replace():
for x in range(5000000):
old_value2 = s.replace('\t', '')
old_value3 = old_value2.replace('\n', '')
old_value3.replace('\r', '')
def _replace3():
for x in range(5000000):
old_value2 = s.replace('\t', '\\t')
old_value3 = old_value2.replace('\n', '\\n')
old_value3.replace('\r', '\\r')
def _translate1():
for x in range(5000000):
s.translate(str.maketrans({'\t': '', '\n': '', '\r': ''}))
t2 = str.maketrans({'\t': '', '\n': '', '\r': ''})
t3 = str.maketrans({'\t': None, '\n': None, '\r': None})
t4 = str.maketrans({'\t': '\\t', '\n': '\\n', '\r': '\\r'})
def _translate2():
for x in range(5000000):
s.translate(t2)
def _translate3():
for x in range(5000000):
s.translate(t3)
def _translate4():
for x in range(5000000):
s.translate(t4)
print('### replace')
run("_replace()")
print('### replace3')
run("_replace3()")
print('### translate1')
run("_translate1()")
print('### translate2')
run("_translate2()")
print('### translate3')
run("_translate3()")
print('### translate4')
run("_translate4()")
速度: _replace > translate3 > _replace3 > translate2 > translate1 > translate4
结论: translate是个辣鸡~~
运行结果:
### replace
15000004 function calls in 4.451 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 4.451 4.451 <string>:1(<module>)
1 1.721 1.721 4.451 4.451 demo.py:7(_replace)
1 0.000 0.000 4.451 4.451 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
15000000 2.730 0.000 2.730 0.000 {method 'replace' of 'str' objects}
### replace3
15000004 function calls in 4.785 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 4.785 4.785 <string>:1(<module>)
1 1.830 1.830 4.785 4.785 demo.py:14(_replace3)
1 0.000 0.000 4.785 4.785 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
15000000 2.956 0.000 2.956 0.000 {method 'replace' of 'str' objects}
### translate1
10000004 function calls in 7.741 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 7.741 7.741 <string>:1(<module>)
1 1.870 1.870 7.741 7.741 demo.py:21(_translate1)
1 0.000 0.000 7.741 7.741 {built-in method builtins.exec}
5000000 1.052 0.000 1.052 0.000 {built-in method maketrans}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
5000000 4.819 0.000 4.819 0.000 {method 'translate' of 'str' objects}
### translate2
5000004 function calls in 5.284 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 5.284 5.284 <string>:1(<module>)
1 0.702 0.702 5.284 5.284 demo.py:31(_translate2)
1 0.000 0.000 5.284 5.284 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
5000000 4.582 0.000 4.582 0.000 {method 'translate' of 'str' objects}
### translate3
5000004 function calls in 3.548 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 3.548 3.548 <string>:1(<module>)
1 0.720 0.720 3.548 3.548 demo.py:36(_translate3)
1 0.000 0.000 3.548 3.548 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
5000000 2.828 0.000 2.828 0.000 {method 'translate' of 'str' objects}
### translate4
5000004 function calls in 5.751 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 5.751 5.751 <string>:1(<module>)
1 0.722 0.722 5.751 5.751 demo.py:41(_translate4)
1 0.000 0.000 5.751 5.751 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
5000000 5.029 0.000 5.029 0.000 {method 'translate' of 'str' objects}
基准测试2
时间消耗:
- tx2 < tx3 < tx1 < tx4
- t2 < t3 < t1 < t4
a = '你好的\r\n打分a\r\tdeadaaes\r\n\tttttrb'
k = ('\r', '\n', '\t')
def t1(text):
for ch in k:
if ch in text:
text = text.replace(ch, ' ')
return text
def t2(old_value1):
# data reformat
old_value2 = old_value1.replace('\t', ' ')
old_value3 = old_value2.replace('\n', ' ')
return old_value3.replace('\r', ' ')
def t3(old_value):
# data reformat
old_value = old_value.replace('\t', ' ')
old_value = old_value.replace('\n', ' ')
return old_value.replace('\r', ' ')
def t3_1(old_value):
# data reformat
return old_value.replace('\r', ' ').replace('\t', ' ').replace('\n', ' ')
def t4(s):
t = s.maketrans("\n\t\r", " ")
return s.translate(t)
def tx1(x):
for i in range(0, 100000):
t1(x)
def tx2(x):
for i in range(0, 100000):
t2(x)
def tx3(x):
for i in range(0, 100000):
t3(x)
def tx3_1(x):
for i in range(0, 100000):
t3_1(x)
def tx4(x):
for i in range(0, 100000):
t4(x)
tx1(a)
tx2(a)
tx3(a)
tx3_1(a)
tx4(a)
Profile:

https://stackoverflow.com/questions/3411771/best-way-to-replace-multiple-characters-in-a-string
Python 字符串多替换时性能基准测试的更多相关文章
- python字符串内容替换的方法(转载)
python字符串内容替换的方法 时间:2016-03-10 06:30:46来源:网络 导读:python字符串内容替换的方法,包括单个字符替换,使用re正则匹配进行字符串模式查找与替换的方法. ...
- Python - 字符串的替换(interpolation) 具体解释
字符串的插值(interpolation) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27054263 字符串的替换 ...
- python 字符串中替换字符
今天本来打算写个程序,替换字符串中固定的一个字符:将<全部替换成回车'\n' 于是,我写成这样 s='sdjj<ddd<denj,>' for x in s: if x=='& ...
- python字符串replace失效问题
python字符串replace替换无效 背景 今天想把一个列表中符合条件的元素中 替换部分字符串, 发现怎么替换,改元素还是没有改变,本以为是内存引用的问题后来发现并不然. 经查阅解决 在Pytho ...
- StackOverFlow排错翻译 - Python字符串替换: How do I replace everything between two strings without replacing the strings?
StackOverFlow排错翻译 - Python字符串替换: How do I replace everything between two strings without replacing t ...
- Python - 字符串模板的安全替换(safe_substitute) 具体解释
字符串模板的安全替换(safe_substitute) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27057339 ...
- Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接
Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接 字符串是Python中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符 ...
- python 字符串替换
字符串替换可以用内置的方法和正则表达式完成.1用字符串本身的replace方法: a = 'hello word'b = a.replace('word','python')print b 2用正则表 ...
- python字符串替换的2种有效方法
python 字符串替换可以用2种方法实现:1是用字符串本身的方法.2用正则来替换字符串 下面用个例子来实验下:a = 'hello word'我把a字符串里的word替换为python1用字符串本身 ...
随机推荐
- Flask框架入门(一)
Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核,其他几乎所有的功能都 ...
- c# 第11节 运算符大全
本节内容: 1:数学运算符 2:赋值运算符 3:关系运算符 4:布尔运算符 5:位运算符 6:其他运算符 1:数学运算符 2:赋值运算符 3:关系运算符 4:布尔运算符 5:位运算符 & 运算 ...
- 201871010118-唐敬博《面向对象程序设计(java)》第十六周学习总结
博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 <https://www.cnblogs.com/nwnu-daizh/> 这个作业的要求在哪里 <https://ww ...
- opencv鼠标事件
#include <opencv2\opencv.hpp> using namespace cv; struct mouse_para { cv::Mat org; cv::Mat img ...
- Mysql基础知识--视图
一.视图的操作 为了提高SQL语句的复用性和操作表的安全性,,MySQL数据库管理系统5提供了视图特性. 视图:本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有名称的行和列数据.但是视图并不在 ...
- zz京东电商推荐系统实践
挺实在 今天为大家分享下京东电商推荐系统实践方面的经验,主要包括: 简介 排序模块 实时更新 召回和首轮排序 实验平台 简介 说到推荐系统,最经典的就是协同过滤,上图是一个协同过滤的例子.协同过滤主要 ...
- NOIP 2003 乒乓球
洛谷 P1042 乒乓球 https://www.luogu.org/problemnew/show/P1042 JDOJ 1363: [NOIP2003]乒乓球 T1 https://neooj.c ...
- Linux学习笔记-第6天 - 问题的根本
这些知识其实看起来很简单,之前不管是在学习C语言还是bat批处理,类似结构早已熟知. 但其实运用起来并不算好,可能真正的原因还 是在于得多练习吧.希望明年的今天自己不要再纠结与这些基础性的知识.
- A1083 List Grades (25 分)
Given a list of N student records with name, ID and grade. You are supposed to sort the records with ...
- [LeetCode] 850. Rectangle Area II 矩形面积之二
We are given a list of (axis-aligned) rectangles. Each rectangle[i] = [x1, y1, x2, y2] , where (x1, ...