Strings are immutable in Python, which means once a string is created, you cannot alter the contents of the strings. If at all, you need to change it, a new instance of the string will be created with the alterations.
Having that in mind, we have so many ways to solve this
- 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 - filterfunction
 - >>> "".join(filter(lambda char: char != "i", "it is icy"))
't s cy'
 
Timing comparison
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")
Result
1.64474582672
0.29278588295
0.311302900314
str.replace and str.translate methods are 8 and 5 times faster than the accepted answer.
Note: Comprehension method and filter methods are expected to be slower, for this case, since they have to create list and then they have to be traversed again to construct a string. And re is a bit overkill for a single character replacement. So, they all are excluded from the timing comparison.