How to delete all instances of a character in a string in python?

前端 未结 6 1864
清酒与你
清酒与你 2020-12-08 00:04

How do I delete all the instances of a character in this string? Here is my code:

def findreplace(char, string):
    place = string.index(char)
    string[pl         


        
相关标签:
6条回答
  • 2020-12-08 00:27

    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

    1. Using str.replace,

      >>> "it is icy".replace("i", "")
      't s cy'
      
    2. Using str.translate,

      >>> "it is icy".translate(None, "i")
      't s cy'
      
    3. Using Regular Expression,

      >>> import re
      >>> re.sub(r'i', "", "it is icy")
      't s cy'
      
    4. Using comprehension as a filter,

      >>> "".join([char for char in "it is icy" if char != "i"])
      't s cy'
      
    5. Using filter function

      >>> "".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.

    0 讨论(0)
  • 2020-12-08 00:31

    Try str.replace():

    string = "it is icy"
    print string.replace("i", "")
    
    0 讨论(0)
  • replace() method will work for this. Here is the code that will help to remove character from string. lets say

    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"
    
    0 讨论(0)
  • 2020-12-08 00:33
    >>> x = 'it is icy'.replace('i', '', 1)
    >>> x
    't is icy'
    

    Since your code would only replace the first instance, I assumed that's what you wanted. If you want to replace them all, leave off the 1 argument.

    Since you cannot replace the character in the string itself, you have to reassign it back to the variable. (Essentially, you have to update the reference instead of modifying the string.)

    0 讨论(0)
  • 2020-12-08 00:40
    # s1 == source string
    # char == find this character
    # repl == replace with this character
    def findreplace(s1, char, repl):
        s1 = s1.replace(char, repl)
        return s1
    
    # find each 'i' in the string and replace with a 'u'
    print findreplace('it is icy', 'i', 'u')
    # output
    ''' ut us ucy '''
    
    0 讨论(0)
  • 2020-12-08 00:42

    I suggest split (not saying that the other answers are invalid, this is just another way to do it):

    def findreplace(char, string):
       return ''.join(string.split(char))
    

    Splitting by a character removes all the characters and turns it into a list. Then we join the list with the join function. You can see the ipython console test below

    In[112]: findreplace('i', 'it is icy')
    Out[112]: 't s cy'
    

    And the speed...

    In[114]: timeit("findreplace('it is icy','i')", "from __main__ import findreplace")
    Out[114]: 0.9927914671134204
    

    Not as fast as replace or translate, but ok.

    0 讨论(0)
提交回复
热议问题