在Python中,字符串是不可变的,这意味着一旦创建了一个字符串,就不能更改字符串的内容。如果需要更改字符串,需要创建一个新的实例。
考虑到这一点,我们有很多方法来解决这个问题。
Using str.replace
,
>>> "it is icy".replace("i", "")
't s cy'
Using str.translate
,
>>> "it is icy".translate(None, "i")
't s cy'
Using Regular Expression,
>>> import re
>>> re.sub(r'i', "", "it is icy")
't s cy'
Using comprehension as a filter,
>>> "".join([char for char in "it is icy" if char != "i"])
't s cy'
Using filter
function
>>> "".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
有点过头了。因此,所有这些方法都被排除在时间比较之外。