Python 在尝试替换子字符串之前,是否应该检查它是否存在?
在python3中,在尝试替换子字符串之前是否值得检查它是否存在?我正在检查大约40000个字符串,只希望在其中大约1%的字符串中找到substring1。检查和跳过或尝试替换失败需要更长的时间吗Python 在尝试替换子字符串之前,是否应该检查它是否存在?,python,string,Python,String,在python3中,在尝试替换子字符串之前是否值得检查它是否存在?我正在检查大约40000个字符串,只希望在其中大约1%的字符串中找到substring1。检查和跳过或尝试替换失败需要更长的时间吗 如果子字符串1为字符串: string=string.replace(子字符串1,子字符串2) 或者只是 string=string.replace(子字符串1、子字符串2) 简单比复杂好。无论如何,做替换都需要检查,所以没有理由自己写出来特殊情况不够特殊;您不需要任何特殊的处理来替换子字符串的零个
如果子字符串1为字符串:
string=string.replace(子字符串1,子字符串2)
或者只是
string=string.replace(子字符串1、子字符串2)
简单比复杂好。无论如何,做替换都需要检查,所以没有理由自己写出来<代码>特殊情况不够特殊
;您不需要任何特殊的处理来替换子字符串的零个实例-它的工作原理与替换任何其他数量的实例相同
不要勾选。两个选项的结果相同。然而,就性能而言,第二个要比第一个好 第一个命令将使您对字符串进行两次检查,一次检查,一次替换。因此,它将始终通过字符串一次,可能两次 第二个,总是只通过字符串一次来尝试和替换 对于
replace
函数,如果在字符串中找不到第一个参数(substring1
),则不会发生任何事情。因此,第二个是完全安全的使用
永远记住,越简单越好 不,不需要检查,在找到模式之前它不会替换任何内容。第一个将搜索两次,因此速度会较慢。第二种方法有利于调试。问问自己,“如果
if
检查解决了什么特殊问题?如果我没有它,这段代码的行为会有什么不同?”您希望检查失败的频率是多少?如果子字符串不存在,第一个更快;如果是的话,第二个更快。总体运行时间是故障率的函数,它取决于预期的工作负载str.replace
比str慢好几倍。uu包含uu
,因此如果很少找到子字符串,您可以通过检查而不是盲目尝试替换它来节省总体时间。在我的机器上,'foo'.replace('bar','baz'))
一百万次迭代只需几分之一秒——很难想象一个应用程序的这种优化是一种严重的改进。但是,是的,“foo”
中的“bar”大约是4倍的速度,因此至少可以想象有一种情况会有所帮助。我同意这些评论,但是每次检查KISS(保持简单愚蠢)会使代码更难阅读(特别是如果是更大流程的一部分)。对于一个典型的用例来说,这些微小的改进(首先检查if)是不值得的。