Ответ 1
Строки неизменяемы в 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
немного переборщик для замены одного символа. Таким образом, все они исключены из сравнения времени.