如何删除python中的string的所有实例?
如何删除此string中所有字符的实例? 这是我的代码:
def findreplace(char, string): place = string.index(char) string[place] = '' return string
但是,如果我运行这个,会发生什么情况:
>>> findreplace('i', 'it is icy') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in findreplace TypeError: 'str' object does not support item assignment
为什么是这样?
string在Python中是不可变的,这意味着一旦创build了一个string,就不能改变string的内容。 如果有的话,你需要改变它,一个新的string实例将会被创build。
考虑到这一点,我们有很多方法来解决这个问题
-
使用
str.replace
,>>> "it is icy".replace("i", "") 'ts cy'
-
使用
str.translate
,>>> "it is icy".translate(None, "i") 'ts cy'
-
使用正则expression式,
>>> import re >>> re.sub(r'i', "", "it is icy") 'ts cy'
-
使用理解作为filter,
>>> "".join([char for char in "it is icy" if char != "i"]) 'ts cy'
-
使用
filter
function>>> "".join(filter(lambda char: char != "i", "it is icy")) 'ts 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.translate
和str.translate
方法比接受的答案快8到5倍。
注意: 在这种情况下 ,理解方法和filter方法预计会比较慢,因为它们必须创build列表,然后再遍历它们来构造一个string。 而对于单个字符replace来说,这有点矫枉过正。 所以,他们都被排除在时间比较之外。
尝试str.replace()
:
str="it is icy" print str.replace("i", "")
>>> x = 'it is icy'.replace('i', '', 1) >>> x 't is icy'
由于你的代码只会取代第一个实例,所以我认为这就是你想要的。 如果您想要全部replace它们,请closures1
参数。
既然你不能replacestring本身的字符,你必须把它重新分配给variables。 (基本上,你必须更新引用而不是修改string。)
replace()
方法将为此工作。 这里是有助于从string中删除字符的代码。 可以这么说
j_word = 'Stringtoremove' word = 'String' for letter in word: if j_word.find(letter) == -1: continue else: # remove matched character j_word = j_word.replace(letter, '', 1) #Output j_word = "toremove"
我build议分裂(不是说其他答案是无效的,这只是另一种方式):
def findreplace(char, string): return ''.join(string.split(char))
按字符分割将删除所有字符并将其转换为列表。 然后我们用join函数join列表。 你可以看到下面的ipython控制台testing
In[112]: findreplace('i', 'it is icy') Out[112]: 'ts cy'
而速度…
In[114]: timeit("findreplace('it is icy','i')", "from __main__ import findreplace") Out[114]: 0.9927914671134204
不如replace或翻译,但确定。