如何删除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。

考虑到这一点,我们有很多方法来解决这个问题

  1. 使用str.replace

     >>> "it is icy".replace("i", "") 'ts cy' 
  2. 使用str.translate

     >>> "it is icy".translate(None, "i") 'ts cy' 
  3. 使用正则expression式,

     >>> import re >>> re.sub(r'i', "", "it is icy") 'ts cy' 
  4. 使用理解作为filter,

     >>> "".join([char for char in "it is icy" if char != "i"]) 'ts cy' 
  5. 使用filterfunction

     >>> "".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.translatestr.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或翻译,但确定。