Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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/4/string/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_String - Fatal编程技术网

Python 在尝试替换子字符串之前,是否应该检查它是否存在?

Python 在尝试替换子字符串之前,是否应该检查它是否存在?,python,string,Python,String,在python3中,在尝试替换子字符串之前是否值得检查它是否存在?我正在检查大约40000个字符串,只希望在其中大约1%的字符串中找到substring1。检查和跳过或尝试替换失败需要更长的时间吗 如果子字符串1为字符串: string=string.replace(子字符串1,子字符串2) 或者只是 string=string.replace(子字符串1、子字符串2) 简单比复杂好。无论如何,做替换都需要检查,所以没有理由自己写出来特殊情况不够特殊;您不需要任何特殊的处理来替换子字符串的零个

在python3中,在尝试替换子字符串之前是否值得检查它是否存在?我正在检查大约40000个字符串,只希望在其中大约1%的字符串中找到substring1。检查和跳过或尝试替换失败需要更长的时间吗

如果子字符串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)是不值得的。