字符串在Python中是不可变的,这意味着一旦创建了字符串,就无法更改字符串的内容。如果完全需要更改它,则将使用更改创建一个新的字符串实例。
考虑到这一点,我们有很多方法可以解决此问题
使用str.replace
,
>>> "it is icy".replace("i", "")
't s cy'
使用str.translate
,
>>> "it is icy".translate(None, "i")
't s cy'
使用正则表达式
>>> import re
>>> re.sub(r'i', "", "it is icy")
't s cy'
使用理解作为过滤器,
>>> "".join([char for char in "it is icy" if char != "i"])
't s cy'
使用filter
功能
>>> "".join(filter(lambda char: char != "i", "it is icy"))
't s cy'
时序比较
def findreplace(m_string, char):
m_string = list(m_string)
for k in m_string:
if k == char:
del(m_string[m_string.index(k)])
return "".join(m_string)
def replace(m_string, char):
return m_string.replace("i", "")
def translate(m_string, char):
return m_string.translate(None, "i")
from timeit import timeit
print timeit("findreplace('it is icy','i')", "from __main__ import findreplace")
print timeit("replace('it is icy','i')", "from __main__ import replace")
print timeit("translate('it is icy','i')", "from __main__ import translate")
结果
1.64474582672
0.29278588295
0.311302900314
str.replace
和str.translate
方法比接受的答案快8倍和5倍。
注意:对于这种情况,理解方法和过滤器方法预计会更慢,因为它们必须创建列表,然后必须再次遍历以构造字符串。并且re
对于单个字符替换来说有点过大。因此,它们都被排除在时序比较之外。