我有一个由"S"和"C"组成的字符串。
这个字符串至少包含一个"S"和一个"C"。
我想找到最后一次出现的"CS",并将其改为"SC"。
目前我有两种方法:
P = P[::-1].replace("SC", "CS", 1)[::-1]
并且
P = P[:P.rfind("CS")] + "SC" + P[P.rfind("CS") + 2:]
哪一行可能更快?还有,有没有更快的方法来完成我正在做的事情?
我有一个由"S"和"C"组成的字符串。
这个字符串至少包含一个"S"和一个"C"。
我想找到最后一次出现的"CS",并将其改为"SC"。
目前我有两种方法:
P = P[::-1].replace("SC", "CS", 1)[::-1]
并且
P = P[:P.rfind("CS")] + "SC" + P[P.rfind("CS") + 2:]
>>> s = 'CSsomethingSCSagainCSsomething'
>>> 'SC'.join(s.rsplit('CS', 1))
CSsomethingSCSagainSCsomething
语法:
new_substring.join(str.rsplit(old_substring, occurance))
methodcaller('rsplit', 'CS', 1)(s)
比直接使用 s.rsplit('CS', 1)
稍微慢一些。) - chepner在我简单的计时中,这个方法比使用rsplit()
和join()
的解决方案快20%:
head, _, tail = string.rpartition('CS')
new_string = f"{head}SC{tail}"
当然,这取决于Python 3.6+。
format(head=head,...)
,它的速度不够快。仅适用于Python 3.6。好的。 - Jean-François Fabre
timeit
模块。如果你正在使用iPython控制台,可以尝试使用%timeit
命令来进行测试。这样你就可以自己回答这种问题(“哪一行代码更快?”)。 - Rory Daulton